将不同的日期格式转换为单个日期格式

时间:2019-05-13 06:16:15

标签: sql sql-server

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

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)

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

3 个答案:

答案 0 :(得分: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()更复杂。

答案 1 :(得分:0)

您问题中格式2的示例很好地说明了为什么无法完成此操作,即可以将其解释为格式2或3。

您需要更好地控制传入的数据,我认为这必然需要一个手动元素。

如果您要将某种客户端名称/ ID拉入数据库,则可能有一条规则,即哪些客户端以哪种格式发送日期,然后可以通过日期转换函数运行字符串值,该函数将是为特定的客户或一组客户量身定制,但是即使那样,您也必须相信,随着时间的流逝,这一点将保持一致。

答案 2 :(得分:0)

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

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

样式标准

  • 日期时间和smalldatetime的默认值为100
  • 110美国
  • 111日本
  • 112 ISO

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