【问题标题】:Convert long date stored as text to short date Access SQL将存储为文本的长日期转换为短日期 Access SQL
【发布时间】:2014-06-29 16:21:20
【问题描述】:

我正在尝试通过 MS Access SQL 将存储为文本的长日期转换为短日期。

例如,我有一个从网站解析信息的表,其中一个字段是 2014 年 6 月 17 日,星期二。我想在另一个表中运行更新查询,该表采用该值并将其转换为 17/06/ 2014.

请问有什么可以使用的功能吗?

谢谢

埃尔顿

【问题讨论】:

    标签: sql date ms-access


    【解决方案1】:

    对于像“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 日。

    【讨论】:

      【解决方案2】:

      以@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
      

      【讨论】:

      • 谢谢大家。我尝试了@ako 的示例,它有效!
      【解决方案3】:

      试试:

      Format(Split("Tuesday, June 17, 2014", ",")(1), "dd/mm/yyyy")
      

      【讨论】:

      • 谢谢,但它给了我一个错误“您输入的表达式有一个无效的点 (.) 或缺少运算符...”我试图用 () 来处理没有成功
      • 这个表达式中没有点运算符,所以我想错误出在你周围的代码中。如果你发帖我可以看看。
      猜你喜欢
      • 1970-01-01
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多