sql 日期时间转换错误
sql datetime cast error
我有一种像这样的日期时间格式'Mon Sep 26 18:30:24 UTC+0200 2016'。我需要将 table 作为日期时间插入...有人可以帮助我吗?
select convert(datetime,'Fri Jan 1 00:00:00 UTC+0100 1960')
ERROR:Conversion failed when converting date and/or time from
character string.
根据您的评论(我正在使用 SSMS),我认为这是 SQL 服务器。
您可以这样尝试:
DECLARE @tbl TABLE(StringDate VARCHAR(100));
INSERT INTO @tbl VALUES
('Fri Jan 1 00:00:00 UTC+0100 1960'),('Mon Nov 28 12:30:00 UTC+0100 2016');
SELECT StringDate
,ToXml
,HundredAndNine
,CONVERT(DATETIME,HundredAndNine,109) AS Converted
FROM @tbl AS tbl
CROSS APPLY(SELECT CAST('<x>' + REPLACE(StringDate,' ','</x><x>') + '</x>' AS XML)) AS Casted(ToXml)
CROSS APPLY(SELECT ToXml.value('/x[2]','varchar(3)') + ' ' --part 2: The month
+ ToXml.value('/x[3]','varchar(2)') + ' ' --part 3: The day
+ ToXml.value('/x[6]','varchar(4)') + ' ' --part 6: The year
+ ToXml.value('/x[4]','varchar(8)') --part 4: The time
) AS DateTimeFormat(HundredAndNine)
由于您的格式与任何支持的格式都不兼容 (find details here),我们不得不使用字符串方法对您的构造部分进行重新排序。
我的代码使用技巧在空格处拆分 字符串。每个空格都替换为 </x><x>
。开头的 <x>
和结尾的 </x>
允许将每个部分作为 XML.
中的一个元素进行寻址
<x>Fri</x>
<x>Jan</x>
<x>1</x>
<x>00:00:00</x>
<x>UTC+0100</x>
<x>1960</x>
我阅读并重新连接各个部分以适应模式 109
。其余的都是微不足道的...
更新:这个
的一个函数
CREATE FUNCTION dbo.CovertStrangeFormatToDateTime(@StringDate VARCHAR(100))
RETURNS DATETIME
AS
BEGIN
RETURN
(
SELECT CONVERT(DATETIME,HundredAndNine,109) AS Converted
FROM
(SELECT CAST('<x>' + REPLACE(@StringDate,' ','</x><x>') + '</x>' AS XML)) AS Casted(ToXml)
CROSS APPLY(SELECT ToXml.value('/x[2]','varchar(3)') + ' ' --part 2: The month
+ ToXml.value('/x[3]','varchar(2)') + ' ' --part 3: The day
+ ToXml.value('/x[6]','varchar(4)') + ' ' --part 6: The year
+ ToXml.value('/x[4]','varchar(8)') --part 4: The time
) AS DateTimeFormat(HundredAndNine)
)
END
GO
你可以这样称呼它:
SELECT dbo.CovertStrangeFormatToDateTime('Fri Jan 1 00:00:00 UTC+0100 1960');
首先,请务必先阅读此内容:MSDN Books Online on CAST and CONVERT (Transact-SQL)
我认为最好使用日期格式“127”。
CONVERT(varchar(50), DateValueField, 127)
或者如果您认为其他日期格式更适合您,请将“127”更改为您的新格式代码。
希望对您有所帮助。
我有一种像这样的日期时间格式'Mon Sep 26 18:30:24 UTC+0200 2016'。我需要将 table 作为日期时间插入...有人可以帮助我吗?
select convert(datetime,'Fri Jan 1 00:00:00 UTC+0100 1960')
ERROR:Conversion failed when converting date and/or time from character string.
根据您的评论(我正在使用 SSMS),我认为这是 SQL 服务器。
您可以这样尝试:
DECLARE @tbl TABLE(StringDate VARCHAR(100));
INSERT INTO @tbl VALUES
('Fri Jan 1 00:00:00 UTC+0100 1960'),('Mon Nov 28 12:30:00 UTC+0100 2016');
SELECT StringDate
,ToXml
,HundredAndNine
,CONVERT(DATETIME,HundredAndNine,109) AS Converted
FROM @tbl AS tbl
CROSS APPLY(SELECT CAST('<x>' + REPLACE(StringDate,' ','</x><x>') + '</x>' AS XML)) AS Casted(ToXml)
CROSS APPLY(SELECT ToXml.value('/x[2]','varchar(3)') + ' ' --part 2: The month
+ ToXml.value('/x[3]','varchar(2)') + ' ' --part 3: The day
+ ToXml.value('/x[6]','varchar(4)') + ' ' --part 6: The year
+ ToXml.value('/x[4]','varchar(8)') --part 4: The time
) AS DateTimeFormat(HundredAndNine)
由于您的格式与任何支持的格式都不兼容 (find details here),我们不得不使用字符串方法对您的构造部分进行重新排序。
我的代码使用技巧在空格处拆分 字符串。每个空格都替换为 </x><x>
。开头的 <x>
和结尾的 </x>
允许将每个部分作为 XML.
<x>Fri</x>
<x>Jan</x>
<x>1</x>
<x>00:00:00</x>
<x>UTC+0100</x>
<x>1960</x>
我阅读并重新连接各个部分以适应模式 109
。其余的都是微不足道的...
更新:这个
的一个函数CREATE FUNCTION dbo.CovertStrangeFormatToDateTime(@StringDate VARCHAR(100))
RETURNS DATETIME
AS
BEGIN
RETURN
(
SELECT CONVERT(DATETIME,HundredAndNine,109) AS Converted
FROM
(SELECT CAST('<x>' + REPLACE(@StringDate,' ','</x><x>') + '</x>' AS XML)) AS Casted(ToXml)
CROSS APPLY(SELECT ToXml.value('/x[2]','varchar(3)') + ' ' --part 2: The month
+ ToXml.value('/x[3]','varchar(2)') + ' ' --part 3: The day
+ ToXml.value('/x[6]','varchar(4)') + ' ' --part 6: The year
+ ToXml.value('/x[4]','varchar(8)') --part 4: The time
) AS DateTimeFormat(HundredAndNine)
)
END
GO
你可以这样称呼它:
SELECT dbo.CovertStrangeFormatToDateTime('Fri Jan 1 00:00:00 UTC+0100 1960');
首先,请务必先阅读此内容:MSDN Books Online on CAST and CONVERT (Transact-SQL)
我认为最好使用日期格式“127”。
CONVERT(varchar(50), DateValueField, 127)
或者如果您认为其他日期格式更适合您,请将“127”更改为您的新格式代码。
希望对您有所帮助。