sql Server 中时间值一样 可是得到的结果不一样 why
A:select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6)
B:select substring(convert(varchar(20),GETDATE(),112),1,6)
C:select GETDATE()

解决方案 »

  1.   

    select convert(varchar(20),'2010-03-03 15:54:27.073',112) 
    select convert(varchar(20),GETDATE(),112)
    /*
    --------------------
    2010-03-03 15:54:27.(1 行受影响)
    --------------------
    20100303(1 行受影响)
    */
      

  2.   

    select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6) 
    select substring(convert(varchar(20),GETDATE(),120),1,6) 
    select GETDATE()--
    --------------
    --2010-0
    --
    --(1 行受影响)
    --
    --
    --------------
    --2010-0
    --
    --(1 行受影响)
    --
    --
    -------------------------
    --2010-03-03 16:18:27.100
    --
    --(1 行受影响)
      

  3.   


     select  convert(varchar(20),'2010-03-03 15:54:27.073',112) 
     select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6)
     select  convert(varchar(20),GETDATE(),112) 
     select substring(convert(varchar(20),GETDATE(),112),1,6)
     select GETDATE()
      

  4.   

    select convert(varchar(20),
                   '2010-03-03 15:54:27.073',--此时系统把它当做字符串,后面的就参数不起作用
                  112
                    )select convert(varchar(20),'2010-03-03 15:54:27.073',112) 
    select convert(varchar(20),'2010-03-03 15:54:27.073',120) 
    select convert(varchar(20),'2010-03-03 15:54:27.073',113) 
    /*--------------------
    2010-03-03 15:54:27.(1 行受影响)
    --------------------
    2010-03-03 15:54:27.(1 行受影响)
    --------------------
    2010-03-03 15:54:27.(1 行受影响)
    */
     
      

  5.   

    select substring(convert(varchar(20),cast('2010-03-03 15:54:27.073' as datetime),112),1,6) 
    select substring(convert(varchar(20),GETDATE(),112),1,6) 
    select GETDATE()/*------------
    201003(1 行受影响)
    ------------
    201003(1 行受影响)
    -----------------------
    2010-03-03 16:19:25.143(1 行受影响)
    */
      

  6.   

    select substring(convert(varchar(20),cast('2010-03-03 15:54:27.073' as datetime),112),1,6) 
    select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6) 
    /*------------
    201003(1 行受影响)
    ------------
    2010-0(1 行受影响)
    */
      

  7.   

    select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6) 
    select substring(convert(varchar(20),GETDATE(),120),1,6)
    这样的结果是一样的 
      

  8.   

    select convert(varchar(20),'2010-03-03 15:54:27.073',112) --2010-03-03 15:54:27.
    select convert(varchar(20),GETDATE(),112) --20100303这两个都不一样,后面肯定不一样啊。
    前者就是字符之间的取位,112 并没有起作用。
    后者是先时间转换,然后转字符串。 所以出来就只有8位
    [style] --引自联机丛书数据格式的样式,
    1、将 datetime 或 smalldatetime 数据转换成字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型),或将已知日期或时间格式的字符数据转换成 datetime 或 smalldatetime 数据;
    2、将 float、real、money 或 smallmoney 数据转换成字符数据(nchar、nvarchar、char、varchar、nchar 或 nvarchar 数据类型)。
    如果 style 为 NULL,则返回的结果也为 NULL。
      

  9.   

    /*  你上面的三句话能看出来是要转换日期的,但是第一句明显有问题,convert的三个参数第一个是要转换的数据类型,第二个是要转换的字符串,而第三个是针对日期格式才生效的,而你第一句话本身就是有错误的,因为第二个参数不是日期型,所以后面的112根本不起作用,而第二句写的有点多余,第三句是直接输出日期,所以三句出来的结果不一样,你的convert函数用的有问题。*/
    --  下面前两句的修改
    select convert(varchar(6),convert(datetime,'2010-03-03 15:54:27.073'),112)
    select convert(varchar(6),GETDATE(),112)
      

  10.   

    --A:
    select substring(convert(varchar(20),cast('2010-03-03 15:54:27.073' as datetime),112),1,6) 
    --B:
    select substring(convert(varchar(20),GETDATE(),112),1,6) --這樣就相同了 原因在於'2010-03-03 15:54:27.073'做為了字符型處理 而非日期型
    /*
    ------------
    201003(1 個資料列受到影響)
    ------------
    201003(1 個資料列受到影響)
    */
      

  11.   

    晚了。
    select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6) 
    中'2010-03-03 15:54:27.073'为字符串处理了。转换就可以了。
    转换两种:
    cast('2010-03-03 15:54:27.073' as datetime)
    Convert(datetime,'2010-03-03 15:54:27.073')
      

  12.   

    A:select substring(convert(varchar(20),'2010-03-03 15:54:27.073',112),1,6) 
    B:select substring(convert(varchar(20),GETDATE(),120),1,6)