首页 > 解决方案 > 将自定义格式字符串转换为日期

问题描述

我从源系统之一接收日期值(作为字符串)。它总是一个 8 字符长,如下所示。我真的不确定他们为什么保持这种格式。

15/06-10
07/03-03
28/10-04
10/07-90
05/07-55

但是对于我的应用程序,我需要将其转换为适当的日期格式(即DD-MON-YYYY)。

在oracle中,我可以使用to_date来实现这一点。就像是

select to_date('15/06-10','yy/mm-dd') from dual;

但在 SQL Server 中,我找不到这样的功能。有没有办法做到这一点?我得到的最接近的是

DECLARE @d VARCHAR(100) = '15/06-10';
SELECT DATEFROMPARTS('20'+SUBSTRING(@d,7,2),SUBSTRING(@d,4,2),SUBSTRING(@d,1,2))

我不确定这是否是正确的方法。此外,它仅在我20year. 但我正在从1950. 所以我不能硬编码1920上述示例的预期输出是

+----------+-------------+
| 15/06-10 | 15-JUN-2010 |
+----------+-------------+
| 07/03-03 | 07-MAR-2003 |
+----------+-------------+
| 28/10-04 | 28-OCT-2004 |
+----------+-------------+  
| 10/07-90 | 10-JUL-1990 |
+----------+-------------+
| 05/07-55 | 05-JUL-1955 |
+----------+-------------+  

标签: sqlsql-serverstringdatesql-server-2012

解决方案


SQL Server 没有to_date()函数。但这是一种更简单的方法来进行您想要的转换:

select convert(date, replace('20' + str, '/', '-'))
from (values ('15/06-10'), ('07/03-03'), ('28/10-04')) v(str)

中的表达式select实际上将格式更改为 YYYY-MM-DD,它被简单地转换为日期。但是,SQL Server convert()/cast()在识别字符串中的日期方面相对聪明。


推荐阅读