0

我正在尝试从 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;例如:

1988 年 1 月 1 日和 2013 年 1 月 1 日

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

4

5 回答 5

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需要 on F1

于 2013-01-16T09:51:18.303 回答
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 也像上面的查询

于 2013-01-16T09:49:05.887 回答
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
于 2013-01-16T11:17:39.657 回答
0

我相信从字符串转换到日期是这样的:

CONVERT (datetime, '16.01.2013', 103)

你在Varchar那里使用。

于 2013-01-16T09:52:14.193 回答
0

尝试这个

CONVERT(DATETIME, '25/12/1988', 101)
于 2013-01-16T09:49:19.473 回答