SQL 将样式为 d-MMM-yyyy 的字符串日期转换为 DATE
SQL convert String date of style d-MMM-yyyy to DATE
我正在导入 CSV 文件,其中一个字段是非标准日期字符串,其中包含 7-Dec-2021
等条目
有什么想法可以将其转换为 DATETIME
对象,我可以将其插入到我的 SQL table 中吗?标准 CAST
/CONVERT
无效。
微软 SQL 服务器 2012 - 11.0.2100.60
TRY_CONVERT
似乎在这里工作:
SELECT TRY_CONVERT(datetime, '7-Dec-2021'); -- 2021-12-07 00:00:00.000
编辑:
一旦我们将破折号替换为空格,您输入的日期几乎与格式掩码 106 匹配。考虑这个解决方案:
SELECT dt, CONVERT(datetime, REPLACE(dt, '-', ' '), 106) AS dt_out
FROM yourTable;
这会在 SQL Server 2014 上为 dt_out
输出 2021-12-07 00:00:00.000
,并且在 SQL Server 2012 上的行为应该相同。
我猜测您使用的LOGIN
语言不是基于英语的,因此'Dec'
(and/or 其他月份)不被识别为有效的月份名称。
您可以指定要用于批处理的语言,然后 CONVERT
:
SET LANGUAGE BRITISH;
SELECT TRY_CONVERT(date,'7-Dec-2021',106);
我正在导入 CSV 文件,其中一个字段是非标准日期字符串,其中包含 7-Dec-2021
有什么想法可以将其转换为 DATETIME
对象,我可以将其插入到我的 SQL table 中吗?标准 CAST
/CONVERT
无效。
微软 SQL 服务器 2012 - 11.0.2100.60
TRY_CONVERT
似乎在这里工作:
SELECT TRY_CONVERT(datetime, '7-Dec-2021'); -- 2021-12-07 00:00:00.000
编辑:
一旦我们将破折号替换为空格,您输入的日期几乎与格式掩码 106 匹配。考虑这个解决方案:
SELECT dt, CONVERT(datetime, REPLACE(dt, '-', ' '), 106) AS dt_out
FROM yourTable;
这会在 SQL Server 2014 上为 dt_out
输出 2021-12-07 00:00:00.000
,并且在 SQL Server 2012 上的行为应该相同。
我猜测您使用的LOGIN
语言不是基于英语的,因此'Dec'
(and/or 其他月份)不被识别为有效的月份名称。
您可以指定要用于批处理的语言,然后 CONVERT
:
SET LANGUAGE BRITISH;
SELECT TRY_CONVERT(date,'7-Dec-2021',106);