2010-07-18 20 views
0

在我的數據庫中,我有一個表,其中一列以字符串格式存儲joining_months,如1月,2月,3月......(依此類推)。如何在SQL Server中將字符串視爲一個月

現在我想在這個表上運行一個SQL查詢來獲取那些只有在用戶指定的月份之前或之後的加入月份的行。

喜歡的東西:

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

我如何比較存儲在字符串格式這樣的幾個月?

請幫忙!

+1

使用'='或'<>'? – 2010-07-18 05:35:23

回答

3

我發現這樣做在這個page的這個相當外的開箱方式:

另一種方式來做到這一點是: SELECT CHARINDEX(MONTHNAME,「XXJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC」)/ 3 monthNumber

您可以通過首先從表中提取月份的前3個字符並將其與硬編碼字符串'XXJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'進行比較來修改它。這應該做到這一點。

所以,你的查詢可以是這樣的:

select CHARINDEX(substing(joining_month,1,3),'XXJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC')/3 
      AS monthnumber, * 
      from table1 
      where monthnumber >or< 3 
+1

如果不需要月份編號,則不需要/ 3。非常聰明,如果你不能改變架構 – gbn 2010-07-18 08:07:04

+0

+1巧妙 – quantumSoup 2010-07-18 08:33:12

+0

真的很好的方法..工作成功..非常感謝..! – Akshay 2010-07-18 12:49:46

3

您應該在表格上有與該名稱關聯的月份的數字值的另一列,例如, 1爲「1月」,2爲「2月」等。

然後,您可以在對數值進行比較時簡單地過濾字符串的名稱。

只要謹慎一點,像這樣的直接比較只有在月份是同一年的日期時纔有效。如果他們在不同的年份,那麼比較這些月份是沒有意義的,除非考慮到這一年。

+0

對我來說,不可能對數據庫進行任何更改。 而且我不需要關心幾年,因爲應用程序會保留一年的數據。 – Akshay 2010-07-18 05:40:32

相關問題