如何将String转换为Datetime,包括SQL中的时间部分

时间:2016-06-03 10:14:22

标签: sql sql-server sql-server-2008 sql-server-2012

我想将下面的字符串转换为SQL中的DateTime。

20140601152943767

我知道convert(date,'20140601152943767')这个,但我也想要时间。

上面的函数只返回日期部分。

提前致谢。

5 个答案:

答案 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