【问题标题】:Converting different dates format into single date format将不同的日期格式转换为单个日期格式
【发布时间】:2019-05-13 06:16:15
【问题描述】:

在我的应用程序中,客户端可以提供任何格式的日期,我必须仅以dd/mm/yyyy 格式显示给定日期。日期格式为 as-

1. dd-mmm-yyyy (Ex- 21-Jan-2019)
2. dd/mm/yyyy (Ex- 02/03/2019)
3. mm/dd/yyyy (Ex- 04/23/2019)
4. dd.mm.yyyy (Ex- 08.02.2019)
5. dd mmmm yyyy (Ex- 13 March 2019)
6. yyyy-mm-dd (Ex- 2019-03-04)
7. mmmm dd, yyyy (Ex- January 23, 2019)

请建议我如何使用正则表达式来识别日期格式,然后转换为所需的格式。

【问题讨论】:

  • 包含这些日期的列的数据类型是什么??
  • 您无法识别格式。无法知道您的第二个示例 02/03/2019 是 dd/mm/yyyy 还是 mm/dd/yyyy,您需要提供该信息。
  • 嗨,我在谷歌搜索了很多,但没有找到结果。用户可以输入任何格式的日期,我只需将所有日期转换为 dd/mm/yyyy 格式。我们不能有任何替代品吗?
  • 我使用 varchar 来保存所有日期
  • 为什么要使用 varchar 来使用日期?有特定的 date 类型列 - 使用正确的类型会让你的生活变得更轻松..

标签: sql sql-server


【解决方案1】:

已经提到过,您的选项 (2) 和 (3) 对解决此问题构成了存在问题。所以,这个答案忽略了这个问题。

SQL Server 非常擅长计算日期。所以,你可以试试:

select try_convert(date, col)

这将返回未知日期格式的 NULL 值。您还可以查找特定格式:

select coalesce(try_convert(date, col),
                try_convert(date, col, 101),
                try_convert(date, col, 104),
                try_convert(date, col, 120),
                . . .
               )

如果您需要在尝试转换之前调整字符串值,则表达式可能比try_convert() 更复杂。

【讨论】:

    【解决方案2】:

    您问题中格式 2 的示例很好地说明了为什么不能这样做,即它可以被解释为格式 2 或格式 3。

    您需要更好地控制传入的数据,我认为这必然需要手动操作。

    如果您将某种客户端名称/ID 提取到数据库中,您可能会制定一个规则,围绕哪些客户端以哪种格式发送日期,然后您可以通过日期转换函数运行字符串值,该函数将是为特定客户或客户组量身定制,但即便如此,您也必须相信这会随着时间的推移保持一致。

    【讨论】:

    • 是的,麦克我可以根据供应商 ID 维护一个日期格式列表。但问题是我有很长的供应商名单,大多数供应商的格式都是未知的,而且格式也不是针对特定供应商的固定格式。所以我必须只应用自定义逻辑来识别日期,然后将日期转换为 dd/mm/yyyy 格式。
    • 供应商会改变他们的日期格式吗?如果是这样,我不确定是否可以在没有手动输入每张发票的情况下执行此操作(即使我亲眼阅读“01/02/2019”,除非有人告诉我格式,否则我不会知道那是什么日期)。如果没有,也许您可​​以设置一些东西,在每个供应商收到第一张发票时为其设置默认命运格式。这将只需要新供应商的用户输入,以及当前供应商的一些初始启动。
    • (这可能的工作方式是您将新的/“未映射的”供应商留在某种临时表中,然后设置某种警报来告诉用户他们的输入是必需的.)
    【解决方案3】:

    在阅读这些发票时,您是否找不到国家代码,而不是为每个供应商设置规则,而是按国家/地区制定规则?

    SELECT CONVERT(VARCHAR(n), GETDATE(), style) 
    

    风格标准

    • 100 datetime 和 smalldatetime 的默认值
    • 110 美国
    • 111 日本
    • 112 ISO

    https://tableplus.io/blog/2018/09/sql-server-date-format-cheatsheet.html

    【讨论】:

      猜你喜欢
      • 2013-06-21
      • 1970-01-01
      • 2017-10-02
      • 2018-02-12
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      相关资源
      最近更新 更多