问题是这样的:SQL语句:   
declare @n float 
declare @c char
set @n = 20
set @c = '6565asd'
select  结果为=@n+@c运行后结果为:
结果为                                                   
----------------------------------------------------- 
26.0(所影响的行数为 1 行)
本来以为会有语法错误,但是没想到却出现这样的结果,今天问了老师也是支支吾吾的,
所以到这里请教一下,这是什么原因呢?

解决方案 »

  1.   

    declare   @n   float   
    declare   @c   char char --没有指定字符长度,默认情况为1位
    所以以下为6,取的第1位..set   @c   =   '6565asd '
      

  2.   

    取的是第一位select @c---就可以看到,只取了第1位
      

  3.   

    select     结果为=@n+@c --select 20+6-------等于26
      

  4.   


    问题是这样的: SQL语句:       
    declare   @n   float   
    declare   @c   char 
    set   @n   =   20 
    set   @c   =   '6565asd ' 
    select     结果为=@n+@c 
    --------------------------
    这里没转换。你把@c变量定义为一个长度的字符,虽然给@c赋值等于'6565asd',但由于@c只能存储一位字符,所以@c为'6'了,
    执行select     结果为=@n+@c 时,浮点类型与字符类型相加,会隐式的将字符型变量@c转换为浮点类型,转换后相加。
    所以结果为26.0
      

  5.   

    ----只与第一个字母有关:把@c 第1个改为0
    declare   @n   float   
    declare   @c   char 
    set   @n   =   20 
    set   @c   =   '0565asd ' --
    select     结果为=@n+@c 
    /*
    结果为                                                   
    ----------------------------------------------------- 
    20.0(所影响的行数为 1 行)*/
    ----只与第一个字母有关:把@c 第1个改为1
    declare   @n   float   
    declare   @c   char 
    set   @n   =   20 
    set   @c   =   '1565asd ' --
    select     结果为=@n+@c 
    /*
    结果为                                                   
    ----------------------------------------------------- 
    21.0(所影响的行数为 1 行)
    */
      

  6.   

    declare   @n   float  
    declare   @c   char
    set   @n   =   20
    set   @c   =   '6565asd '
    select [datalength(@c)]=datalength(@c),[@c]=@c,[结果为=@n+@c=20+6]=@n+@c
      

  7.   

    declare   @n   float   
    declare   @c   char 
    set   @n   =   20 
    set   @c   =   '6565asd ' 
    select     结果为=@n+@c 
    首先@c是char(1),这里我就不说了.上面有人说了.
    语句相当于是
    select @n+'6'
    进行+运算时,是字串相连,还是算术相加.不是看哪个类型操作数在前.
    当有一个操作数为数字型时,SQL默认将+处理为算术运算.datetime型数据类似. 用datetime相关的函数处理时,自不多言.
    当datetime与字串操作时,SQL也是认为是两个datetime型数据在操作.应该说数据类型在运算时也有优先级的. 数字,日期(可处理为数字),字串
    而数字本身,按其精度,又来确定优先度,高清度优先级高.
    比如 1.0/2
      

  8.   

    你是要什么樣的結果:206565asd ???