sql - 将自定义格式字符串转换为日期
问题描述
我从源系统之一接收日期值(作为字符串)。它总是一个 8 字符长,如下所示。我真的不确定他们为什么保持这种格式。
15/06-10
07/03-03
28/10-04
10/07-90
05/07-55
但是对于我的应用程序,我需要将其转换为适当的日期格式(即DD-MON-YYYY
)。
- 前 2 个字符代表
Date
- 接下来的 2 个字符(之后
/
)代表Month
- 最后2个代表
year
在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))
我不确定这是否是正确的方法。此外,它仅在我20
为year
. 但我正在从1950
. 所以我不能硬编码19
或20
上述示例的预期输出是
+----------+-------------+
| 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 |
+----------+-------------+
解决方案
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()
在识别字符串中的日期方面相对聪明。
推荐阅读
- localization - 使用 node.js 在 Bot Framework v4 中进行本地化 - 多语言语言环境文件
- unity3d - 多场景编辑:游戏窗口显示非活动场景
- html - Flexbox justify-content 不起作用(孩子右侧的奇怪额外边距)
- xml - 编辑 solrconfig.xml 的最简单方法是什么?
- android - firebase signInWithCustomToken 不起作用
- javascript - 将字符串转换为分隔对象键
- javascript - 最大子对象 React-native
- c++ - 初始化 constexpr -“用非常量表达式非法初始化 'constexpr' 实体”
- node.js - Knex 从时间列和日期列中获取格式化时间
- java - 无法在 JPanel Java 中编辑文本区域