2016-03-15 31 views
1

基本上我想檢查是否有任何結束日期早於開始日期(這將是錯誤的)。因此我決定檢查字符串的正確4個字符並與大於1進行比較。代碼有效,但即使將日期更改爲故意錯誤,也不會發生任何反應。格式是mm/dd/yyyy。如何顯示具有enddate <startdate的MS Access中的行?

SELECT * 
FROM [myTable] 
WHERE 
RIGHT ('EndDate',4)<RIGHT ('StartDate',4) 
; 

給我的表在'短文本'中寫了日期列。我可以改變它的日期,但是我不太確定如何使用DATEDIFF()

回答

2

RIGHT('EndDate',4)RIGHT ('StartDate',4)每個返回4個字符的字符串,日期。所以你的查詢的WHERE條件相當於'Date' < 'Date',每行都是False。不要將字段名稱放在引號內。

日期比較不像日期/時間值那樣麻煩,而是日期作爲字符串。使用CDate()將日期字符串轉換爲真實的日期/時間值。然後比較簡單的......

SELECT m.* 
FROM myTable AS m 
WHERE CDate(m.EndDate) < CDate(m.StartDate); 

如果它的實際改變這些字段的數據類型爲日期/時間,查詢可能是簡單,更快地執行。

+0

謝謝,這正是我想要的。請問「m。*」的含義與SELECT *具有相同的效果。 是否定義表格而不是每次輸入整個'myTable'? –

+1

我用'm'作爲表名的別名。所以'm。*'表示來自'm'數據源的所有字段,它實際上是'myTable'。由於這個查詢只有一個數據源,因此'SELECT m。*'等同於'SELECT *'。但別名並沒有真正增加這個查詢的價值;我只是習慣性地將我的數據源別名化了。 – HansUp

2

對於字符串比較使用本:

SELECT * 
FROM [myTable] 
WHERE 
RIGHT ([EndDate],4)<RIGHT ([StartDate],4) 

但它不會對日期在一年之內,因爲你只比較年工作。它適用於日期格式yyyy/mm/dd,在這種情況下不需要Right函數。

最佳的解決方案 - 使用CDate將文本轉換爲日期和使用用於比較同一運營商 - 「<」

+0

Woops,與您同時發佈。你是什​​麼意思,它不會在不同的年份工作? –

+0

對不起,我的錯。編輯答案。 –

相關問題