在我的數據庫中,我有一個表,其中一列以字符串格式存儲joining_months
,如1月,2月,3月......(依此類推)。如何在SQL Server中將字符串視爲一個月
現在我想在這個表上運行一個SQL查詢來獲取那些只有在用戶指定的月份之前或之後的加入月份的行。
喜歡的東西:
select * from table1 where joining_month >or< 'March'
我如何比較存儲在字符串格式這樣的幾個月?
請幫忙!
在我的數據庫中,我有一個表,其中一列以字符串格式存儲joining_months
,如1月,2月,3月......(依此類推)。如何在SQL Server中將字符串視爲一個月
現在我想在這個表上運行一個SQL查詢來獲取那些只有在用戶指定的月份之前或之後的加入月份的行。
喜歡的東西:
select * from table1 where joining_month >or< 'March'
我如何比較存儲在字符串格式這樣的幾個月?
請幫忙!
我發現這樣做在這個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
如果不需要月份編號,則不需要/ 3。非常聰明,如果你不能改變架構 – gbn 2010-07-18 08:07:04
+1巧妙 – quantumSoup 2010-07-18 08:33:12
真的很好的方法..工作成功..非常感謝..! – Akshay 2010-07-18 12:49:46
您應該在表格上有與該名稱關聯的月份的數字值的另一列,例如, 1爲「1月」,2爲「2月」等。
然後,您可以在對數值進行比較時簡單地過濾字符串的名稱。
只要謹慎一點,像這樣的直接比較只有在月份是同一年的日期時纔有效。如果他們在不同的年份,那麼比較這些月份是沒有意義的,除非考慮到這一年。
對我來說,不可能對數據庫進行任何更改。 而且我不需要關心幾年,因爲應用程序會保留一年的數據。 – Akshay 2010-07-18 05:40:32
使用'='或'<>'? – 2010-07-18 05:35:23