如何在SQL Server中将字符串视为一个月

时间:2010-07-18 05:27:47

标签: sql sql-server-2005

在我的数据库中,我有一个表,其中一列以字符串格式存储joining_months,如1月,2月,3月......(依此类推)。

现在我想在这个表上运行一个SQL查询来获取那些仅在用户指定月份之前或之后加入月份的行。

类似的东西:

select * from table1 where joining_month >or< 'March'

如何比较以字符串格式存储的月份?

请帮忙!

2 个答案:

答案 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