在sql中使用varchar date字段作为日期范围函数

时间:2015-08-25 18:12:02

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

我有一个以下格式的varchar日期字段 -

ACCOUNTING_DATE
---------------
2014/01/07

现在,我想使用下面的日期范围功能 -

select * 
from table
where (ACCOUNTING_DATE >= convert(varchar(10),'01/01/2014',101)
and ACCOUNTING_DATE <= convert(varchar(10),'12/31/2014',101))

这没有给我正确的结果。你能帮助一个更好的方法来实现同样的目标吗?感谢。

3 个答案:

答案 0 :(得分:1)

您需要转换为date进行日期比较,否则您正在进行string比较。

select * 
from table
where convert(date, ACCOUNTING_DATE) between '2014-01-01' and '2014-12-31'

此外,如果您要存储日期,则应该使用date列,而不是varchar - 当您遇到诸如此类的问题时。

答案 1 :(得分:1)

您可以将会计日期转换为比较前的日期:

where cast(Accounting_Date as date) between '1-1-14' and '12-31-14'

如果您真的只想检查它是否在2014年,您还可以分别取出该部分字符串:

where left(accounting_date, 4) = 2014

答案 2 :(得分:0)

您目前有一些QuizData形式的条件。数据库会将日期转换为varchar(事实上,它是对字符串文字的[varchar] < [date]调用是无关紧要的)并按字典顺序对它们进行比较。

“正确”的解决方案可能是将列类型更改为实际的convert列。如果无法做到这一点,您可以明确地将比较的两边转换为date s:

date