Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server中将datetime转换为yyyymmddhhmmss_Sql_Sql Server_Datetime_Gmt - Fatal编程技术网

在sql server中将datetime转换为yyyymmddhhmmss

在sql server中将datetime转换为yyyymmddhhmmss,sql,sql-server,datetime,gmt,Sql,Sql Server,Datetime,Gmt,我需要从yyyymmddhhmmss计算本地时间,并将其作为yyyymmddhhmmss返回。我已经尝试了下面的,它是工作,但我不能摆脱这个月的名称 Declare @VarCharDate varchar(max) Declare @VarCharDate1 varchar(max) Declare @VarCharDate2 varchar(max) --Declare set @VarCharDate = '20131020215735' --- YYYYMMDDHHMMSS

我需要从yyyymmddhhmmss计算本地时间,并将其作为yyyymmddhhmmss返回。我已经尝试了下面的,它是工作,但我不能摆脱这个月的名称

Declare  @VarCharDate  varchar(max)
Declare  @VarCharDate1 varchar(max)
Declare  @VarCharDate2 varchar(max)

--Declare
set  @VarCharDate = '20131020215735' --- YYYYMMDDHHMMSS

--Convert
set @VarCharDate1 =(select SUBSTRING(@VarCharDate,0,5) + '/' + SUBSTRING(@VarCharDate,5,2)  + '/' + SUBSTRING(@VarCharDate,7,2) +  ' ' + SUBSTRING(@VarCharDate,9,2) +':'+SUBSTRING(@VarCharDate,11,2) +':' + RIGHT(@VarCharDate,2))
select @VarCharDate1

--Convert to Date and Add offset
set @VarCharDate2 =  DATEADD(HOUR,DateDiff(HOUR, GETUTCDATE(),GETDATE()),CONVERT(DATETIME,@VarCharDate1,20))
select @VarCharDate2   


-- Now we need to revert it to YYYYMMDDhhmmss
--Tried this but month name still coming
Select convert(datetime, @VarCharDate2, 120)
通过使用datetime数据类型,您将始终拥有正确的datetime

Declare  @VarCharDate  varchar(max)
Declare  @VarCharDate1 varchar(max)
Declare  @VarCharDate2 varchar(max)

--Declare
set  @VarCharDate = '20131020215735' --- YYYYMMDDHHMMSS

--Convert
set @VarCharDate1 =(select SUBSTRING(@VarCharDate,0,5) + '/' + SUBSTRING(@VarCharDate,5,2)  + '/' + SUBSTRING(@VarCharDate,7,2) +  ' ' + SUBSTRING(@VarCharDate,9,2) +':'+SUBSTRING(@VarCharDate,11,2) +':' + RIGHT(@VarCharDate,2))
select @VarCharDate1

--Convert to Date and Add offset
set @VarCharDate2 =  DATEADD(HOUR,DateDiff(HOUR, GETUTCDATE(),GETDATE()),CONVERT(DATETIME,@VarCharDate1,20))
select @VarCharDate2   

SELECT REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(19), CONVERT(DATETIME, @VarCharDate2, 112), 126), '-', ''), 'T', ''), ':', '') [date]
它将返回-

date
20131021035700

我认为在处理日期列时,我们还需要补偿坏数据。添加了关于“从yyyymmddhhmmss返回并作为yyyymmddhhmmss”的附加验证步骤和清理代码

,这两种格式在我看来是相同的。无论如何,如果你是从一个字符串开始,顺便提一下,把它转换成一个日期时间,然后再转换成所需格式的字符串。不需要子字符串。太好了。当我在片场做的时候,我只使用了“STUFF”位,这是一个处理,将一个不是我自己制作的YYYYHDHHMMSS字符串转换成YYYY-MM-DD hh:MM:ss datetime,我可以在DATEDIFF中使用它。
date
20131021035700
DECLARE  @VarcharDate  VARCHAR(14)
DECLARE  @VarcharDateWorker VARCHAR(19)
DECLARE  @VarcharDateResult VARCHAR(19)

--DECLARE
SET  @VarcharDate = '20131020215735' --- YYYYMMDDHHMMSS
SELECT @VarcharDate AS [InputValue]

--Convert String to date format. Adding trailing space to ensure STUFF can validate the string (Length 19 else NULL)
SET @VarcharDateWorker = STUFF(STUFF(STUFF(STUFF(STUFF(STUFF(@VarcharDate+' ',5,0,'-'),8,0,'-'),11,0,' '),14,0,':'),17,0,':'),20,0,'')
SELECT @VarcharDateWorker AS [TransformStage1]

--Check if date is valid (Return Null if date is invalid)
SET @VarcharDateWorker = CASE WHEN ISDATE(@VarcharDateWorker) = 1 THEN @VarcharDateWorker ELSE NULL END
SELECT @VarcharDateWorker AS [TransformStage2]

--Convert to Date and Add offset
SET @VarcharDateWorker =  CONVERT(VARCHAR(19),DATEADD(HOUR,DateDiff(HOUR, GETUTCDATE(),GETDATE()),@VarcharDateWorker),120)
SELECT @VarcharDateWorker   AS [TransformStage3]

--Cleanout Special Characters to get YYYYMMDDHHMMSS format
SET @VarcharDateResult =  REPLACE(REPLACE(REPLACE(@VarcharDateWorker, ' ', ''), '-', ''), ':', '')
SELECT @VarcharDateResult   AS [OutputValue]