我想将下面的字符串转换为SQL中的DateTime。
20140601152943767
我知道convert(date,'20140601152943767')
这个,但我也想要时间。
上面的函数只返回日期部分。
提前致谢。
答案 0 :(得分:2)
我会使用以下解决方案:
SELECT CONVERT(DATETIME, STUFF(STUFF(STUFF(STUFF('20140601152943767', 9, 0, ' '), 12, 0, ':') , 15, 0, ':'), 18, 0, '.'))
注意#0:所有STUFF
次调用都会将源字符串从20140601152943767
转换为20140601 15:29:43.767
。
注意#1:SELECT STUFF('abcef', 4, 1, 'DDD')
将从索引4开始替换子字符串,长度为1 char(e
),DDD
- > abcDDDf
注意#2:SELECT STUFF('abcef', 4, 0, 'DDD')
返回abcDDDef
答案 1 :(得分:2)
你可以试试ethis:
select
concat(convert(date,LEFT('20140601152943767',8)), ' ' , Convert(time,Dateadd(SECOND,
Right('20140601152943767',2)/1,
Dateadd(MINUTE,
Right('20140601152943767',4)/100,
Dateadd(hour,
Right('20140601152943767',6)/10000,
'1900-01-01')))) )
as myDate
输出:
2014-06-01 22:38:07.0000000
答案 2 :(得分:1)
首先,您需要转换为date
而不是datetime
类型。
第二 - 你应该总是指定所提到的格式:
https://msdn.microsoft.com/en-us/library/ms187928(v=sql.120).aspx
e.g。
select convert(datetime, '20140501', 112)
3 - 展示的值不支持此格式,因此您必须修改yyyy-mm-ddThh:mi:ss.mmm
(iso)之类的值或使用substring
进行自定义转换等。< / p>
;WITH myvalues AS (
SELECT '20140601152943767' value
)
SELECT
convert(date, LEFT(mv.value, 8), 112),
cast(STUFF(STUFF(STUFF(STUFF(mv.[value], 1, 8, ''), 7, 0, '.'), 5, 0, ':'), 3, 0, ':') AS TIME)
FROM myvalues mv
答案 3 :(得分:0)
试试这个
declare @datetime varchar(20) = '20140601152943767'
select convert(varchar(20),convert(date,LEFT(@datetime,8))) + ' ' + substring(RIGHT(@datetime,9), 1, 2)
+ ':' + substring(RIGHT(@datetime,9), 3, 2)
+ ':' + substring(RIGHT(@datetime,9), 5, 2)
+ '.' + substring(RIGHT(@datetime,9), 7, 3)
答案 4 :(得分:0)
我知道有些人可能认为这不是最好的方法,但它仍然是另一种选择。很少有人使用过转换和填充函数。 试试这个。很容易理解。还要测试你的子查询。
select y1||'-'||M1||'-'||d1||' '||h1||':'||mi||':'||s1||':'||f1 as xdate
from
(
select substr('20140601152943767',1,4) Y1 from dual
),
(
select substr('20140601152943767',5,2)M1 from dual
),
(
select substr('20140601152943767',7,2) d1 from dual
),
(
select substr('20140601152943767',9,2) h1 from dual
),
(
select substr('20140601152943767',11,2) mi from dual
),
(
select substr('20140601152943767',13,2) s1 from dual
),
(
select substr('20140601152943767',15,3) f1 from dual
)
输出:
2014-06-01 15:29:43.767