【发布时间】:2014-06-29 16:21:20
【问题描述】:
我正在尝试通过 MS Access SQL 将存储为文本的长日期转换为短日期。
例如,我有一个从网站解析信息的表,其中一个字段是 2014 年 6 月 17 日,星期二。我想在另一个表中运行更新查询,该表采用该值并将其转换为 17/06/ 2014.
请问有什么可以使用的功能吗?
谢谢
埃尔顿
【问题讨论】:
我正在尝试通过 MS Access SQL 将存储为文本的长日期转换为短日期。
例如,我有一个从网站解析信息的表,其中一个字段是 2014 年 6 月 17 日,星期二。我想在另一个表中运行更新查询,该表采用该值并将其转换为 17/06/ 2014.
请问有什么可以使用的功能吗?
谢谢
埃尔顿
【问题讨论】:
对于像“2014 年 6 月 17 日星期二”这样的日期字符串,可以使用这样的 VBA 函数
Option Compare Database
Option Explicit
Public Function ParseDateString(DateString As Variant) As Variant
If IsNull(DateString) Then
ParseDateString = Null
Else
ParseDateString = CDate(Split(DateString, ", ", 2)(1))
End If
End Function
会将字符串转换为真正的日期值。如果您正在运行更新查询并将结果值放入表中的 Date/Time 字段中,那么您不要希望将日期转换为 dd/mm/yyyy 格式。只需使用函数的结果(真正的日期值)。
如果您必须将日期转换为字符串,则使用明确的日期格式yyyy-mm-dd。如果您转换为 dd/mm/yyyy 格式,Access 可能会混淆不明确的日期,12/06/2014 可能会被解释为 12 月 6 日,而不是 6 月 12 日。
【讨论】:
以@VBlades 的示例为基础,但允许年份与 2014 年不同,假设其他年份可能出现在源数据中。
这只有在您希望解析的日期格式一致时才有效。
将此函数粘贴到 vba 模块中并从您的查询中调用它。
Function dateParser(datestr As String) As Variant
Dim day_month, year, day_month_year As String
day_month = Split(datestr, ",")(1)
year = Split(datestr, ",")(2)
day_month_year = day_month + ", " + year
dateParser = Format(day_month_year, "dd/mm/yyyy")
End Function
【讨论】:
试试:
Format(Split("Tuesday, June 17, 2014", ",")(1), "dd/mm/yyyy")
【讨论】: