在我的一个表中有一个列“month_year”(varchar(10)),我有这个查询
select *
from costs
where month_year>='06/2011'
and month_year<='10/2012'
我想显示在这两者之间具有month_year值的行,但是查询似乎忽略了year部分并且给了我这两个月之间的所有行,此查询位于接收a的存储过程中@min_month_year和@max_month_year参数。
答案 0 :(得分:3)
在date
列中存储varchar
值的设计并不是很好
但是你可以做这样的事情
select *
from costs
where
convert(datetime, '01/' + month_year, 103) >='20110601' and
convert(datetime, '01/' + month_year, 103) < '20121101'
但是你的month_year列上的索引将不起作用
如果您确实要将month_year
存储为varchar
,建议您将其存储为YYYYMM
- '201106'
和'201210'
('2011/06'
和'2012/10'
如果你真的喜欢'/'
)。在这种情况下,您可以在不转换的情况下进行比较。