在我的数据库中,我有一个表,其中一列以字符串格式存储joining_months
,如1月,2月,3月......(依此类推)。
现在我想在这个表上运行一个SQL查询来获取那些仅在用户指定月份之前或之后加入月份的行。
类似的东西:
select * from table1 where joining_month >or< 'March'
如何比较以字符串格式存储的月份?
请帮忙!
答案 0 :(得分:3)
您应该在表格上有另一列,该列具有与该名称相关联的月份的数值,例如1表示“1月”,2表示“2月”等。
然后,您可以在对数值进行比较时简单地过滤字符串的名称。
只要谨慎,这样的直接比较只有在月份是同一年的日期才有效。如果他们在不同的年份,那么比较几个月是没有意义的,除非你考虑到这一年。
答案 1 :(得分:3)
我在page上发现了这种相当开箱即用的方法:
另一种方法是: SELECT CHARINDEX(monthname,'XXJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC')/ 3 AS monthNumber
您可以通过首先从表中提取月份的前3个字符并将其与硬编码字符串“XXJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC”进行比较来进行修改。应该这样做。
所以你的查询可以是这样的:
select CHARINDEX(substing(joining_month,1,3),'XXJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC')/3
AS monthnumber, *
from table1
where monthnumber >or< 3