我在比较访问数据库中的日期时遇到问题。基本上,我正在从文本字段中解析出日期,然后尝试将该日期与另一个日期进行比较,以仅提取较新/较旧的记录。
到目前为止,我一切正常,但是当我尝试将表达式添加到 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 中解析日期并尝试对其进行操作,以便我可以针对它运行报告。
我试过谷歌搜索,但没有具体谈论从文本中解析日期并将其转换为日期对象。我认为这可能是一个错误或从左/修剪功能返回日期的方式。您可以看到我在 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。一张图片中有两个屏幕截图。