目标:
如何提取最后14位数字并将其格式化为DATETIME
类型的值?
情况:
我有一个id
列,其中包含几个不同的字符,最后14个字符代表DATETIME
。
示例:
abcdefghj02002216112014
键:
这14位数字是:second
,minute
,hour
,day
,month
,year
查询:
SELECT RIGHT(id,15)
FROM table
答案 0 :(得分:2)
您可以这样做:
declare @variable varchar(50)='abcdefghj02002216112014'
declare @T bigint=RIGHT(@variable, 14)
SELECT DATETIMEFROMPARTS ( @T % 10000,
(@T / 10000) % 100,
(@T / 1000000) % 100,
(@T / 100000000) % 100,
(@T / 10000000000) % 100,
(@T / 1000000000000) % 100, 0 ) AS Result;
结果:
2014年11月16日22:00:02
DATETIMEFROMPARTS:
答案 1 :(得分:1)
长话短说
declare @x varchar(50)='abcdefghj02002216112014'
declare @y varchar(14)=RIGHT(@x, 14)
declare @dtPart varchar(10) = CONCAT(LEFT(RIGHT(@y, 8),2), '/', substring(@y, 9,2), '/', RIGHT(@y,4))
declare @timePart varchar(8)= concat(substring(@y,5,2), ':', substring(@y,3,2),':', left(@y,2))
declare @fullDate varchar(19) =concat(@dtPart, ' ', @timePart)
select Convert(datetime,@fullDate, 103)
答案 2 :(得分:1)
多么可怕的格式!
也许这会有所帮助
示例
Select ID
,NewValue = convert(datetime,right(S,4)+'-'+left(right(S,6),2)+'-'+left(right(S,8),2)+' '+substring(s,5,2)+':'+substring(s,3,2)+':'+substring(s,1,2))
From YourTable A
Cross Apply ( values (right(ID,14)) ) B(s)
返回
ID NewValue
abcdefghj02002216112014 2014-11-16 22:00:02.000
答案 3 :(得分:1)
您可以将DATETIMEFROMPARTS与SUBSTRING函数一起使用
此函数返回指定日期和时间参数的日期时间值。
如下:-
create table #MyTable (id nvarchar(100))
insert #MyTable values ('abcdefghj02002216112014')
select DATETIMEFROMPARTS(
SUBSTRING(RIGHT(id,14),11,15) /*year*/,
SUBSTRING(RIGHT(id,14),9,2) /*month*/,
SUBSTRING(RIGHT(id,14),7,2) /*day*/,
SUBSTRING(RIGHT(id,14),5,2) /*hour*/,
SUBSTRING(RIGHT(id,14),3,2) /* minute*/,
SUBSTRING(RIGHT(id,14),0,3) /*seconds*/,
00 /*milliseconds*/)
from #MyTable
drop table #MyTable