我正在尝试从VARCHAR(50)转换为DATE;只有约会;但它没有给我任何结果 不过这是我用过的陈述:
SELECT COUNT(F0)
FROM [OriginalData]
WHERE F1 between Convert(VARCHAR(11),'25/12/1988',103) and
convert(VARCHAR(11),'16/01/2013',103) AND F0 = 120002
显示结果的唯一方法是当天字符串为01时; e.g:
01/01/1988和01/01/2013
所以请任何建议如何从字符串转换为日期并进行比较?
答案 0 :(得分:2)
假设F1
为varchar(50)
,那么您正在进行字符串比较。
使用正确的ISO日期......
...
WHERE CONVERT(date, F1, 112) -- change this to match F1 format
BETWEEN CONVERT(date,'19881225',112) and
CONVERT(date,'20130116',112)
AND F0 = 120002
请注意,由于CONVERT
上需要F1
,因此从索引角度来看效率不高。
答案 1 :(得分:1)
你需要像这样转换它
SELECT convert(datetime, '23/07/2009', 103)
这意味着查询将是
SELECT COUNT(F0)
FROM [OriginalData]
WHERE F1 between Convert(datetime,'25/12/1988',103) and
convert(datetime,'16/01/2013',103) AND F0 = 120002
转换时而不是VARCHAR(11)
使用DateTime
数据类型
注意:假设F1
的类型为datetime
如果varchar的F1数据类型比
SELECT COUNT(F0)
FROM [OriginalData]
WHERE Convert(datetime,F1,103) between Convert(datetime,'25/12/1988',103) and
convert(datetime,'16/01/2013',103) AND F0 = 120002
转换F1也像上面的查询一样
答案 2 :(得分:0)
试试这个
CONVERT(DATETIME, '25/12/1988', 101)
答案 3 :(得分:0)
我相信从字符串转换为日期是这样的:
CONVERT (datetime, '16.01.2013', 103)
您正在使用Varchar
。
答案 4 :(得分:0)
您可以使用以下查询:
declare @t varchar(100) = '26/12/1988'
select case
when convert(date,@t,103) between Convert(date,'25/12/1988',103) and convert(date,'16/01/2013',103)
then @t
else
'date is not in the specified range'
end