在我的应用程序中,客户端可以提供任何格式的日期,并且我只能以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)
请提出如何使用正则表达式识别日期格式,然后转换为所需格式的建议。
答案 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)
样式标准
https://tableplus.io/blog/2018/09/sql-server-date-format-cheatsheet.html