将字符串转换为日期并获取日期部分
Convert String to date and get Datepart
我有一个字符串列,其中包含这种格式的日期时间值(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'
等等。
提前致谢,
齐亚德
这是一种从奇怪的字符串中获取日期的方法
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()
提示
始终使用适当的类型来存储您的数据!您应该使用它来修复您的数据,而不是用于任何混乱的输出...
取决于日期 9 and/or 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), ':', '')
我有一个字符串列,其中包含这种格式的日期时间值(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'
等等。
提前致谢, 齐亚德
这是一种从奇怪的字符串中获取日期的方法
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()
提示
始终使用适当的类型来存储您的数据!您应该使用它来修复您的数据,而不是用于任何混乱的输出...
取决于日期 9 and/or 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), ':', '')