Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将sql中的字符从奇数格式转换为datetime_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

将sql中的字符从奇数格式转换为datetime

将sql中的字符从奇数格式转换为datetime,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有一个列createdatechar(26),其中包含2004-01-30-21.29.12.893374 我想将此列转换为标准的DATETIME 然而,做一个 Convert(DATETIME, createdate,120) 正在给出此错误: 将varchar数据类型转换为datetime数据类型导致值超出范围 我也尝试过转换值的其他偏差,但我觉得原始日期值的格式导致了问题 我想我需要使用多个LEFT-type语句来分解createdatechar(26)值,但我想首先确保我没有把这件

我有一个列
createdatechar(26)
,其中包含
2004-01-30-21.29.12.893374

我想将此列转换为标准的
DATETIME

然而,做一个

Convert(DATETIME, createdate,120) 
正在给出此错误:

将varchar数据类型转换为datetime数据类型导致值超出范围

我也尝试过转换值的其他偏差,但我觉得原始日期值的格式导致了问题

我想我需要使用多个LEFT-type语句来分解
createdatechar(26)
值,但我想首先确保我没有把这件事复杂化

谁能帮我把SQL Server 2008中的
char
格式转换成
datetime

提前谢谢

Declare @String varchar(50) = '2004-01-30-21.29.12.893374'

Select cast(Left(Stuff(Replace(Stuff(@String,11,1,' '),'.',':'),20,1,'.'),23) as datetime)
返回

2004-01-30 21:29:12.893
2004-01-30 21:29:12.8933740
或者是DateTime2

Declare @String varchar(50) = '2004-01-30-21.29.12.893374'

Select cast(Stuff(Replace(Stuff(@String,11,1,' '),'.',':'),20,1,'.') as datetime2)
返回

2004-01-30 21:29:12.893
2004-01-30 21:29:12.8933740

使用
substr的乐趣

 select convert(datetime,
     substr(createdate, 1, 10) -- use date part as is
      + ' ' + substr(createdate, 12, 2) -- hours
      + ':' + substr(createdate, 15, 2) -- minutes
      + ':' + substr(createdate, 18, 2) -- seconds
      + '.' + substr(createdate, 21, 3) -- milliseconds (limit to 3 digits)
     , 120) as createDate_DatetimeType
from Table1

您可以这样做,无需声明变量或子字符串:

SELECT STUFF(a.fix_punc,11,1,' ') as final_dt
FROM
    (SELECT REPLACE(LEFT(dt_in, 19), '.', ':') + LEFT(RIGHT(dt_in,7),4)
    as fix_punc
    FROM yourtable) as a

那是什么格式?在“createdate”字段上?它看起来像是YYYY-MM-DD-HH-MM-SS.mmmm您不能在
SQL SERVER
;)中享受这种乐趣