2014-03-03 52 views
-2

我有一個類似於下面的表格。我試圖只選擇開始日期在當前月份中的行。這是我到目前爲止,但它不起作用。在本月內選擇日期SQL

SELECT * 
FROM TABLE1 
WHERE StartDate = MONTH(getdate()) 

如何僅選擇開始日期在當前月份中的值?

+0

日期時間是一個月的數據類型 – user3147424

+2

爲什麼接受downvoted和名譽掃地的答案嗎?你不關心性能或可擴展性嗎? – gbn

+0

第一次嘗試工作還沒有回來,接受了你的答案的性能和可擴展性。 – user3147424

回答

4

使用該構建體以避免在開始日期列功能(例如一個月或一年)。這些功能將阻止任何正在使用的索引或統計信息/

SELECT * 
FROM TABLE1 
WHERE 
    StartDate >= DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) 
AND StartDate < DATEADD(month, 1+DATEDIFF(month, 0, GETDATE()), 0) 

這給起始日期的功能不會規模如預期的任何答覆。見error number 2 here。該過濾器現在不可用,並且索引/統計信息不能使用。每一行都將被查看錶掃描。

+1

我個人更喜歡'DateAdd(mm,DateDiff(mm,0,Current_Timestamp)+ 1,0)',因爲這將'+ 1'作爲'DateAdd()'的一部分,這使得我認爲它更清晰一些。除此之外,最好的答案在這裏:) – gvee

+0

@gvee:好點,更新清晰。 – gbn

+0

@gbn你可以解釋一下,以便將來可以理解嗎? – user3147424

-1

你需要檢查這兩個領域

WHERE MONTH(startdate) = MONTH(getdate()) 
+0

今年情況如何? – gvee

+0

看起來我忘記了那部分,但問題已經得到解答。 –

相關問題