【问题标题】:Convert String to Date in MS Access Query在 MS Access 查询中将字符串转换为日期
【发布时间】:2013-06-26 00:40:32
【问题描述】:

我正在尝试根据Date 列从我的access 表中检索数据。我的要求是显示大于特定值的所有内容。我正在尝试cast 我的值,这是一个string,使用格式&CDate 函数和datetime 数据类型,它作为溢出抛出。

这里是查询:

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

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

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

我该如何解决这个问题?

【问题讨论】:

  • edit 澄清您的问题:Events.[Date] 字段是Date/Time 字段还是Text 字段?
  • 完成!! .. 这是一个日期/时间字段
  • 好的,很好。您是否尝试过仅使用Where Events.[Date] > #2013-04-23 01:48:54#
  • 这里的比较值是一个字符串..同样当我在上面使用时,奇怪的是它返回了> =的结果集..我有9条记录,上面的值都显示了..实际结果应该有为零
  • RE:“表中的示例日期记录值:2013-04-23 13:48:54.0”- 访问 Date/Time 字段不存储带有小数秒的值。您的 [Events] 表是原生 Access 表吗?

标签: sql ms-access casting


【解决方案1】:

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

DateValue(String Date) 

【讨论】:

【解决方案2】:

在 Access 中,点击Create > Module 并粘贴以下代码

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 代码中构建.. 所以无法使用此功能,因为我现在可能已在目标服务器上安装了访问权限
  • +1 喜欢更新转换日期字段以进行比较的简单性。
  • @MattDonnan 谢谢。不幸的是,如果在 [Date] 列上有索引,它不会被使用,但是“你不会得到什么东西......”。
【解决方案3】:
cdate(Format([Datum im Format DDMMYYYY],'##/##/####') ) 

将不带标点符号的字符串转换为日期

【讨论】:

    【解决方案4】:

    基本上这样是行不通的

    Format("20130423014854","yyyy-MM-dd hh:mm:ss")
    

    format 函数只有在您的字符串格式正确时才有效

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

    您需要指定字段[Date] 的数据类型是什么,因为我不能将此值2013-04-23 13:48:54.0 放在通用日期字段下(我使用MS access2007)。 您可能想查看此主题: select date in between

    【讨论】:

    • 日期是数据库中配置的日期/时间类型字段
    【解决方案5】:

    如果您需要显示 2014-09-01 之后的所有记录,请将其添加到您的查询中:

    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")
    

    【讨论】:

      猜你喜欢
      • 2019-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-28
      相关资源
      最近更新 更多