我有一个字符串列,其日期时间值为此格式(2016年11月8日星期二06:14:57 GMT)。如何获取此值的日期部分?等。
SELECT DATEPART(MINUTE, 'Tue Nov 8 06:14:57 GMT 2016') as 'Minute'
SELECT DATEPART(Day, 'Tue Nov 8 06:14:57 GMT 2016') as 'Day'
等等。
提前致谢, 齐亚德
答案 0 :(得分:4)
这是一种从奇怪的字符串中获取日期的方法
DECLARE @table TABLE (YourStrangeDate VARCHAR(100));
INSERT INTO @table VALUES('Tue Nov 8 06:14:57 GMT 2016');
WITH Splitted AS
(
SELECT CAST('<x>' + REPLACE(YourStrangeDate,' ','</x><x>') + '</x>' AS XML) AS Casted
FROM @table
)
SELECT
CAST(
Casted.value('/x[3]','nvarchar(2)') --third part = "8"
+ ' ' + Casted.value('/x[2]','nvarchar(3)') --second part = "Nov"
+ ' ' + Casted.value('/x[6]','nvarchar(4)') --6th part = "2016"
+ ' ' + Casted.value('/x[4]','nvarchar(8)') --4th part = Time
AS DATETIME)
FROM Splitted;
注意隐式CAST()
到DATETIME
将依赖于您系统的设置。如果您的月份缩写不是您的系统预期的缩写(例如德语系统中的“Dec”是“Dez”),则会失败。
根据您的评论,这是一次性操作(CSV导入)。您可以在第一行指定SET LANGUAGE English;
以确保...
使用实际日期,您可以继续使用相关功能,例如DATEPART()
始终使用适当的类型来存储您的数据!您应该使用它来修复您的数据,而不是任何泥泞的输出......
答案 1 :(得分:1)
根据日期9和/或10符号将属于日期,并且在第一个:
符号后的1或2个符号将是分钟。所以,你可以通过这个查询获得它们
declare @x varchar(50) = 'Tue Nov 8 06:14:57 GMT 2016'
select [Day] = cast(substring(@x, 9, 2) as int)
, 'Minute' = replace(substring(@x, charindex(':', @x) + 1, 2), ':', '')