アクセスデータベースの日付を比較する際に問題が発生しました。基本的に、テキストフィールドから日付を解析し、その日付を別の日付と比較して、新しい/古いレコードのみを取得しようとしています。
これまでのところすべてが機能していますが、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関数を使用しようとしましたが、それでも不一致エラーが発生します。
WHERE DateValue(Trim(Left([bc_TestingTickets].[notes],InStr([bc_TestingTickets].[notes],' ')))) > DateValue("4/1/2012")
この方法で日付を比較する方法に関するヒントはありますか?データベースのフィールドを変更することはできません。そのため、SQLで日付を解析し、それに対してレポートを実行できるように操作しようとしています。
グーグルを試しましたが、テキストから日付を解析して日付オブジェクトに変換することについて具体的には何も話していません。バグか、left/trim関数から日付が返される方法の可能性があると思います。DateTestというSELECTステートメントの最後に列を追加したことがわかります。これは、アクセスが日付のように扱われていることは明らかです(クエリを実行すると、AZではなく古いものから新しいもの/新しいものから古いものの順に並べ替えるように求められます)またはZA)、selectの2番目の列とは異なります。
日付に基づいてクエリを実行する方法に関するヒント/手がかりを事前に感謝します。
編集: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。1つの画像に2つのスクリーンショットがあります。