select datalength('38498172-D975-4377-8212-3510D5A5BB74')
/*
-----------
--36
*/
select datalength(newid())
/*
-----------
16
*/
select datalength(getdate())
/*
-----------
8*/select datalength('2009-12-29 15:19:36.467')
/*-----------
23
*/
不明白,请大家指点

解决方案 »

  1.   

    --帮助文档
    select datalength(newid())
    /*
    全局唯一标识符 (GUID)。存储大小为 16 字节。-----------
    16
    */
    select datalength(getdate())
    /*
    存储为两个 4 字节整数
    前 4 个字节存储早于或晚于 base date 1900 年 1 月 1 日的天数。基准日期是系统的参照日期。不允许 datetime 的值早于 1753 年 1 月 1 日。后 4 个字节存储一天之中的具体时间,被表示为从午夜算起的毫秒数。秒数的有效范围是 0–59。-----------
    8*/
     
      

  2.   

    select datalength('小爱你小子真坏')
    /*-----------
    14(1 行受影响)*/
      

  3.   

    第一个是一个36字节长的字符串
    第二个是一个16字节长的uniqueidentifier 
    第三个是一个8字节长的datetime
    第四个是一个23字节长的字符串
      

  4.   

    DECLARE @STR VARCHAR(50),@DATE VARCHAR(50)
    SELECT @STR=NEWID(),@DATE='2009-12-29 15:19:36.467'
    select datalength(@STR),DATALENGTH(CONVERT(uniqueidentifier ,@STR))
    ,DATALENGTH(@DATE),DATALENGTH(CONVERT(DATETIME,@DATE))
    --36 16 23 8
      

  5.   

    也就是用 newid()的时候
    它不会先执行 newid() 这个函数得到一个guid 的字符串,再计算字节数
    而是得到了newid() 相对应的数据类型uniqueidentifier  所占的字节数
    getdate() 同理是吧??
      

  6.   

    是的,返回的是uniqueidentifier,该数据类型就是16字节,后面的GETDATE也是这样,只是我们看到的是字符串而已
      

  7.   

    其实小爱妞迷惑的不是datalength ,
    而是后面的参数没搞明白
    1,4 是字串
    2 是uniqueidentifier
    3 是datetime结果当然不一样了~~~~~~~~
      

  8.   


    --突然想到,可以出一个不错的面试题
    select datalength(1),len(1),datalength(1111111),len(1111111)