2017-07-05 146 views
0

我正在使用SQL Server Mgmt Studio。我需要創建一個公式,該公式只在日期/時間字段LAW_TAEEMASTER.MASTR_ENTRY的月份和日期小於或等於當前月份和日期時纔會選擇記錄。例如,如果LAW_TAEEMASTER.MASTR_ENTRY = 8/20/2015且當前日期= 7/6/2017,請排除。如果LAW_TAEEMASTER.MASTR_ENTRY = 12/21/2014且當前日期= 2017年1月15日,請包括。日期格式是我的弱點。這是我曾嘗試:當月和日小於當前日期時選擇記錄

select LAW_TAEEMASTER.MASTR_ENTRY 
    from LAW_TAEEMASTER 
    WHERE day(LAW_TAEEMASTER.MASTR_ENTRY) <= DAY(GETDATE()) and MONTH(LAW_TAEEMASTER.MASTR_ENTRY) <= MONTH(getdate()) 

select LAW_TAEEMASTER.MASTR_ENTRY 
     from LAW_TAEEMASTER 
     WHERE AND DATEPART(DAY,LAW_TAEEMASTER.MASTR_ENTRY) <= DATEPART(DAY,GETDATE()) AND DATEPART(MONTH,LAW_TAEEMASTER.MASTR_ENTRY) <= DATEPART(MONTH,GETDATE()) 

但這些只是評價的月份和日期分別和一個數字,大於或小於,所以它不包括記錄。我如何才能讓SQL將這些日期識別爲日期的一部分,而忽略一年呢?

回答

0

解釋邏輯和代碼: 使用CONVERT(varchar(5),<your_date> ,110))110爭議意味着美國標準時間,並有一個輸出像mm-dd-yyyy。然後,我們只採取日期的第一個五個字符,即月份和日期。

110 =毫米-DD-YYYY 詳細瞭解cast and convert here

我的試樣臺:

MASTER_ENTRY 
2017-08-30 
2017-07-05 
2017-07-04 

然後我執行該查詢

SELECT LAW_TAEEMASTER.MASTR_ENTRY 
FROM LAW_TAEEMASTER 
WHERE CONVERT(varchar(5),LAW_TAEEMASTER.MASTR_ENTRY ,110) <= CONVERT(varchar(5),GETDATE() ,110) 

結果:其中,月和日相等或更早當前的月和日

MASTER_ENTRY 
2017-07-05 
2017-07-04 

我希望這有助於和歡迎StackOverflow上。如果您發現此答案或任何其他答案可解決您的問題,請將其標記爲解決方案。這將有助於將來遇到同樣問題的社區和其他程序員。謝謝。

-1

訣竅是通常以類似於CCYYMMDD格式的方式將數據存儲在表中。然後您可以將日期與普通比較運算符進行比較因此,2017年7月5日這將是20170705.你經常會得到ISO Date formats 還有其他格式,比如類似1st Jan 1970之類的毫秒數。 如果時區也起作用,事情會變得更加複雜(UTC)。 如果使用簡單的CCYYMMDD格式,則簡單地除以10000並使用餘數進行比較將允許MMDD比較。

+0

如果是日期,則將其存儲爲日期。否則,即使是最基本的日曆算術也無法完成。 20160301到20160229之間的天數肯定不是72. – fhossfel

+0

我說過不把它作爲日期存儲嗎?不要讓你的消極情緒@fhossfel。 op要求能夠對MMDD進行比較。通過思考如何存儲數據,您可以直觀地瞭解它如何易於比較。任何這些格式都允許您直接進行比較,而不是像MM-DD-YY那樣考慮。 https://www.w3schools.com/sql/sql_dates.asp – JGFMK

+0

也做了我或op事件提及做日期差異算術! – JGFMK

0

我會用month()day()做到這一點:

where month(LAW_TAEEMASTER.MASTR_ENTRY) * 100 + day(LAW_TAEEMASTER.MASTR_ENTRY) < month(getdate()) * 100 + day(getdate()) 

如果性能是一個問題,我會建議一個計算列有一個索引。

相關問題