将 varchar "dd/mm/yyyy hh:mm:ss" 转换为 datetime2
Convert varchar "dd/mm/yyyy hh:mm:ss" to datetime2
我有一列 varchar(50) 格式的日期写成 "dd/mm/yyyy"
我需要将它转换为 datetime2 格式,但是当它运行时它假定格式为 "mm/dd/yyyy" 并相应地进行转换,当天字段超过 12 时抛出错误。如何让它以正确的方式提取数据?
例如
03/04/2017 00:00:00
03/04/2017 00:00:00
15/06/2017 00:00:00
15/06/2017 00:00:00
17/05/2017 00:00:00
最后 3 次投掷错误。
当前命令:
select case when try_convert(datetime2,[Date]) is not null
then cast([Date]as datetime2)
else null
end, [Date]
from [Source1]
结果:
2017-03-04 00:00:00.0000000 03/04/2017 00:00:00
2017-03-04 00:00:00.0000000 03/04/2017 00:00:00
NULL 15/06/2017 00:00:00
NULL 15/06/2017 00:00:00
NULL 17/05/2017 00:00:00
试试这个:
WITH VTE AS (
SELECT *
FROM (VALUES ('03/04/2017 00:00:00'),
('03/04/2017 00:00:00'),
('15/06/2017 00:00:00'),
('15/06/2017 00:00:00'),
('17/05/2017 00:00:00')) V(StringDatetime))
SELECT *,
TRY_CONVERT(datetime2(0), VTE.StringDatetime, 103) AS NonStringDatetime2
FROM VTE;
您可以在文档中找到样式代码列表:Date and Time Styles
convert(datetime, @dt, 103)
检查您提供的所有值的结果。
declare @dt varchar(50)='15/06/2017 00:00:00'
set @dt='03/04/2017 00:00:00'
select convert(datetime, @dt, 103)
set @dt='03/04/2017 00:00:00'
select convert(datetime, @dt, 103)
set @dt='15/06/2017 00:00:00'
select convert(datetime, @dt, 103)
set @dt='15/06/2017 00:00:00'
select convert(datetime, @dt, 103)
set @dt='17/05/2017 00:00:00'
select convert(datetime, @dt, 103)
是DateFormat的问题。你可以很容易地判断出Month为15时报错。
declare @st as varchar(50)='15/06/2017 00:00:00'
select Convert(DateTime2,@ST,103)
你可以使用上面的代码
我有一列 varchar(50) 格式的日期写成 "dd/mm/yyyy" 我需要将它转换为 datetime2 格式,但是当它运行时它假定格式为 "mm/dd/yyyy" 并相应地进行转换,当天字段超过 12 时抛出错误。如何让它以正确的方式提取数据?
例如
03/04/2017 00:00:00
03/04/2017 00:00:00
15/06/2017 00:00:00
15/06/2017 00:00:00
17/05/2017 00:00:00
最后 3 次投掷错误。
当前命令:
select case when try_convert(datetime2,[Date]) is not null
then cast([Date]as datetime2)
else null
end, [Date]
from [Source1]
结果:
2017-03-04 00:00:00.0000000 03/04/2017 00:00:00
2017-03-04 00:00:00.0000000 03/04/2017 00:00:00
NULL 15/06/2017 00:00:00
NULL 15/06/2017 00:00:00
NULL 17/05/2017 00:00:00
试试这个:
WITH VTE AS (
SELECT *
FROM (VALUES ('03/04/2017 00:00:00'),
('03/04/2017 00:00:00'),
('15/06/2017 00:00:00'),
('15/06/2017 00:00:00'),
('17/05/2017 00:00:00')) V(StringDatetime))
SELECT *,
TRY_CONVERT(datetime2(0), VTE.StringDatetime, 103) AS NonStringDatetime2
FROM VTE;
您可以在文档中找到样式代码列表:Date and Time Styles
convert(datetime, @dt, 103)
检查您提供的所有值的结果。
declare @dt varchar(50)='15/06/2017 00:00:00'
set @dt='03/04/2017 00:00:00'
select convert(datetime, @dt, 103)
set @dt='03/04/2017 00:00:00'
select convert(datetime, @dt, 103)
set @dt='15/06/2017 00:00:00'
select convert(datetime, @dt, 103)
set @dt='15/06/2017 00:00:00'
select convert(datetime, @dt, 103)
set @dt='17/05/2017 00:00:00'
select convert(datetime, @dt, 103)
是DateFormat的问题。你可以很容易地判断出Month为15时报错。
declare @st as varchar(50)='15/06/2017 00:00:00'
select Convert(DateTime2,@ST,103)
你可以使用上面的代码