我在比較訪問數據庫中的日期時遇到問題。基本上我從文本字段解析出日期,然後嘗試將該日期與另一個日期進行比較,以僅取出較新/較舊的記錄。比較Access中的日期值 - 條件表達式中的數據類型不匹配
到目前爲止我有一切工作,但是當我嘗試將表達式添加到where子句時,它的行爲就像它不是日期值。
這裏是完整的SQL:
SELECT
Switch(Isdate(TRIM(LEFT(bc_testingtickets.notes, Instr(bc_testingtickets.notes, ' ')))) = false, 'NOT ASSIGNED!!!') AS [Assigned Status],
TRIM(LEFT(bc_testingtickets.notes, Instr(bc_testingtickets.notes, ' '))) AS [Last Updated Date],
bc_testingtickets.notes AS [Work Diary],
bc_testingtickets.ticket_id,
clients.client_code,
bc_profilemain.SYSTEM,
list_picklists.TEXT,
list_picklists_1.TEXT,
list_picklists_2.TEXT,
list_picklists_3.TEXT,
bc_testingtickets.createdate,
bc_testingtickets.completedate,
Datevalue(TRIM(LEFT([bc_TestingTickets].[notes], Instr([bc_TestingTickets].[notes], ' ')))) AS datetest
FROM list_picklists AS list_picklists_3
RIGHT JOIN (list_picklists AS list_picklists_2
RIGHT JOIN (list_picklists AS list_picklists_1
RIGHT JOIN (bc_profilemain
RIGHT JOIN (((bc_testingtickets
LEFT JOIN clients
ON
bc_testingtickets.broker = clients.client_id)
LEFT JOIN list_picklists
ON
bc_testingtickets.status = list_picklists.id)
LEFT JOIN bc_profile2ticketmapping
ON bc_testingtickets.ticket_id =
bc_profile2ticketmapping.ticket_id)
ON bc_profilemain.id =
bc_profile2ticketmapping.profile_id)
ON list_picklists_1.id = bc_testingtickets.purpose)
ON list_picklists_2.id = bc_profilemain.destination)
ON list_picklists_3.id = bc_profilemain.security_type
WHERE (((list_picklists.TEXT) <> 'Passed'
AND (list_picklists.TEXT) <> 'Failed'
AND (list_picklists.TEXT) <> 'Rejected')
AND ((bc_testingtickets.ticket_id) <> 4386))
GROUP BY bc_testingtickets.notes,
bc_testingtickets.ticket_id,
clients.client_code,
bc_profilemain.SYSTEM,
list_picklists.TEXT,
list_picklists_1.TEXT,
list_picklists_2.TEXT,
list_picklists_3.TEXT,
bc_testingtickets.createdate,
bc_testingtickets.completedate,
DateValue(TRIM(LEFT([bc_TestingTickets].[notes], Instr([bc_TestingTickets].[notes], ' '))))
ORDER BY Datevalue(TRIM(LEFT([bc_TestingTickets].[notes], Instr([bc_TestingTickets].[notes], ' '))));
我試圖比較針對不同的日期值是這樣的:
DateValue(Trim(Left([bc_TestingTickets].[notes],InStr([bc_TestingTickets].[notes],' '))))
如果我增加一個小節where子句像下面,我得到的數據類型不匹配錯誤:
WHERE DateValue(Trim(Left([bc_TestingTickets].[notes],InStr([bc_TestingTickets].[notes],' ')))) > #4/1/2012#
我甚至嘗試過使用DateValue函數週圍的手冊d吃了我與測試,但我仍然得到了不匹配的錯誤:
WHERE DateValue(Trim(Left([bc_TestingTickets].[notes],InStr([bc_TestingTickets].[notes],' ')))) > DateValue("4/1/2012")
如何我可以比較該方法的日期任何提示?我無法更改數據庫中的任何字段等,這就是爲什麼我在SQL中解析日期並試圖操作它,以便我可以運行報告。
我試過Google搜索,但沒有具體談到從文本解析日期並將其轉換爲日期對象。我認爲這可能是一個錯誤或日期從左/修剪函數返回的方式。你可以看到我在SELECT語句的末尾添加了一個名爲DateTest的列,它顯而易見的訪問是將它當作一個日期(當查詢運行時,它要求按照最早到最新/最新到最早的順序排序,而不是AZ或ZA),不同於選擇中的第二列。
在此先感謝任何關於如何根據日期查詢的提示/線索。
編輯: 我只是想在下面的語句我的where子句中,仍然得到一個不匹配:
CDate(Trim(Left([bc_TestingTickets].[notes],InStr([bc_TestingTickets].[notes],' ')))) > #4/1/2012#
CDate(Trim(Left([bc_TestingTickets].[notes],InStr([bc_TestingTickets].[notes],' ')))) >
CDate("4/1/2012") CDate(DateValue(Trim(Left([bc_TestingTickets].[notes],InStr([bc_TestingTickets].[notes],' '))))) > #4/1/2012#
我嘗試了所有我能想到的關於把CDATE DateValue將裏面的各種組合外,等。雖然CDate功能看起來像我應該使用的。不知道爲什麼它仍然拋出錯誤。
這裏是鏈接到屏幕截圖,顯示查詢結果http://ramonecung.com/access.jpg。在一張圖片中有兩個截圖。
這是http://stackoverflow.com/questions/9901972/how-can-i-sort-by-date-in-ms-access-2007/9904722#9904722任何幫助? – Fionnuala 2012-04-12 21:42:16