在MS Access查询中将字符串转换为日期

16

我正在尝试基于Date列从我的access表中检索数据。我的要求是显示大于某个值的所有内容。我正在尝试使用&CDate函数将我的值(一个字符串)强制转换为datetime数据类型,并且它会产生溢出。

这是查询:

Select * from Events
Where Events.[Date] > cDate(Format("20130423014854","yyyy-MM-dd hh:mm:ss"))

表格中的示例日期记录值为:2013-04-23 13:48:54.0

access 中的 Events.[Date] 是一个日期/时间类型字段。

我该如何解决这个问题?


请编辑您的问题以澄清:Events.[Date]字段是日期/时间字段还是文本字段? - Gord Thompson
完成了!这是一个日期/时间字段。 - user2385057
好的。你试过只使用 Where Events.[Date] > #2013-04-23 01:48:54# 吗? - Gord Thompson
这里的比较值是一个字符串..当我使用above时,奇怪的是它返回了>=的结果集..我有9个记录与以上的值,所有这些记录都被显示了..实际结果应该是零。 - user2385057
回复:“来自表格的样本日期记录值:2013-04-23 13:48:54.0” - 访问“日期/时间”字段不会存储带有小数秒的值。你的[Events]表是原生的Access表吗? - Gord Thompson
5个回答

22

使用 DateValue() 函数将 string 转换为 date 数据类型。这是最简单的方法。

DateValue(String Date) 

1
很高兴能分享一个例子。 - Rahul Bhat
从此页面获取的示例:DateValue(“6/30/2004”) - Luboš Miřatský

6
在Access中,点击创建 > 模块,然后粘贴以下代码。
Public Function ConvertMyStringToDateTime(strIn As String) As Date
ConvertMyStringToDateTime = CDate( _
        Mid(strIn, 1, 4) & "-" & Mid(strIn, 5, 2) & "-" & Mid(strIn, 7, 2) & " " & _
        Mid(strIn, 9, 2) & ":" & Mid(strIn, 11, 2) & ":" & Mid(strIn, 13, 2))
End Function

按下Ctrl+S,将模块另存为modDateConversion

现在尝试使用类似以下查询的方法:

Select * from Events
Where Events.[Date] > ConvertMyStringToDateTime("20130423014854")

--- 编辑 ---

避免使用用户定义的VBA函数的替代方案:

SELECT * FROM Events
WHERE Format(Events.[Date],'yyyyMMddHhNnSs') > '20130423014854'

与我之前提到的类似行为一样工作,显示所有记录,即使时间戳小于上述值但日期相同..此外,我正在寻找更直接的实现方式,因为这将在Java代码中构建..所以不能使用此函数,因为我可能无法访问目标服务器上的安装。 - user2385057
+1 喜欢更新的简单性,将日期字段转换为比较。 - Matt Donnan
@MattDonnan 谢谢。不幸的是,如果在 [Date] 列上有索引,它将不会被使用,但“没有免费的午餐...”。 - Gord Thompson

2
基本上,这不会奏效。
Format("20130423014854","yyyy-MM-dd hh:mm:ss")

format 函数仅在字符串格式正确时才能工作。

Format (#17/04/2004#, "yyyy/mm/dd")

你需要指定字段 [日期] 的数据类型,因为我不能将这个值 2013-04-23 13:48:54.0 放在一般日期字段下(我使用的是 MS Access2007)。你可能想查看此主题:选择日期区间


日期是在数据库中配置的日期/时间类型字段。 - user2385057

2
cdate(Format([Datum im Format DDMMYYYY],'##/##/####') ) 

将没有标点符号的字符串转换为日期


1
如果您需要显示2014年9月1日后的所有记录,请将以下内容添加到查询中:
SELECT * FROM Events
WHERE Format(Events.DATE_TIME,'yyyy-MM-dd hh:mm:ss')  >= Format("2014-09-01 00:00:00","yyyy-MM-dd hh:mm:ss")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接