TriggerDate
类型的列varchar(50)
。它以MM/dd/yyyy
格式存储值(例如:2016年5月21日)。
此表中有10条记录的日期为2016年5月21日
当我运行此查询时
select *
from Analytics
where convert(date, TriggerDate) = '2016-05-21'
我在结果标签中显示结果,但消息标签显示此错误
Msg 241,Level 16,State 1,Line 1
从字符串转换日期和/或时间时转换失败。
然而,当我跑
时select top 10 *
from Analytics
where convert(date, TriggerDate) = '2016-05-21'
没有错误
执行select CONVERT(date,'05/21/2016')
会返回2016-05-21
,但没有错误。
令我感到困惑的是:前10名如何有所作为,它正在我的登台服务器上运行SQL Server 2014.
我该如何解决这个问题?
在Windows Server 2012 R2中使用SQL Server 2014,系统日期的格式为5/21/2016
答案 0 :(得分:3)
SQL Server将字符串转换为日期
SELECT convert(datetime, '10/23/2016', 101) -- mm/dd/yyyy
SELECT convert(datetime, '2016.10.23', 102) -- yyyy.mm.dd ANSI date with century
SELECT convert(datetime, '23/10/2016', 103) -- dd/mm/yyyy
SELECT convert(datetime, '23.10.2016', 104) -- dd.mm.yyyy
SELECT convert(datetime, '23-10-2016', 105) -- dd-mm-yyyy
试试这个
答案 1 :(得分:0)
使用以下查询可能会对您有所帮助。
select *
from Analytics
where convert(varchar(10), cast(TriggerDate as date), 102) = '2016.05.21'