有如下代码   select convert(varchar(10),'2013-4-5 13:26:35',120)这个最后的结果是什么?如果我还需要这样的代码   where convert(varchar(10),'2013-4-5 13:26:35',120)>='2013-04-05'怎么办?Convert()日期格式

解决方案 »

  1.   

    select convert(varchar(10),'2013-04-05 13:26:35',120)
      

  2.   

    参考:
    http://msdn.microsoft.com/zh-cn/library/ms187928.aspx120表示转成yyyy-mm-dd格式
      

  3.   

    我测试了下.
    系统是不会把'2013-4-5 13:26:13'这样的字符串隐式转换成datetime格式.必须显式才行.    SELECT CONVERT(VARCHAR(10),CAST('2013-4-5 13:26:22' AS DATETIME),120)这样才能得到'2013-04-05'.不然出来的结果是'2013-4-5 1'
    这真是一个悲剧呀!
      

  4.   


    时间转字符串才能按格式变化,字符串转字符串就按varchar(10)截取了.
      

  5.   

    不会因为你标识了120就会帮你默认转时间的.
    除了你自己主动转换或者声明一个变量是时间类型.你赋值给字符他会隐式转,但转不过是会报错.不只是日期有格式转换.FLOAT,MONEY 这些也有(并且有交叉).它不会主动判断能转成啥的.
      

  6.   

    上面的代码是从一个ERP的SQL查询里跟踪出来的.
    我觉得'2013-4-5 13:26;22'这个时间应该是getdate()出来的
    但我看了数据库,中间层,客户端的时区以及日期格式的短日期格式都已经设置成了yyyy-mm-dd了.还有什么情况下可能造成系统的getdate()获得的日期是'2013-4-5 13:26:22'这样的格式
      

  7.   

    你自然跟踪了那应该知道是从哪客户端来的.(如果加上HOSTNAME列的话)然后也能看出那SQL语句传入的参数.如果获取是那种形式应该就是区域时间格式设置的问题导致的.
      

  8.   

    如果是getdate()过来的不会是2013-4-5这种格式,即便是这种格式也是datetime类型,可以按照120格式转换,如果是应用程序上面获得的时间,并且转换成了字符,那很可能根据当前系统(如windows)的当前时间格式设置,而变成2013-4-5这种格式,windows的话,默认也是这样的格式
    不过这些存入datetime类型的时候都可以转换成120的时间格式
      

  9.   

    select convert(varchar(10),'2013-4-5 13:26:35',120)
    --结果是:2013-4-5 1select convert(varchar(10),cast('2013-4-5 13:26:35' as datetime),120)
    --结果是:2013-04-05
      

  10.   

    这说明你们的ERP系统不够专业,建议将ERP系统中的日期格式标准化(添删改查时),否则会受客户端的日期格式设置不同而报错
      

  11.   


    select convert(varchar(10),timer,120) timer from name  where convert(varchar(10),timer,120)>='2013-04-05'没太明白你什么意思......
      

  12.   

    我的文章http://blog.csdn.net/dba_huangzj/article/details/7952403,拉到最下面