在SQLServer中解析日期

时间:2013-01-16 09:46:53

标签: sql sql-server sql-server-2008

我正在尝试从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

所以请任何建议如何从字符串转换为日期并进行比较?

5 个答案:

答案 0 :(得分:2)

假设F1varchar(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