我有一个以下格式的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))
这没有给我正确的结果。你能帮助一个更好的方法来实现同样的目标吗?感谢。
答案 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