转换datetime并在SQL Server中分成2列

时间:2017-01-11 07:26:34

标签: sql sql-server datetime

我正在使用一个SQL表,其中包含一个名为$code=(import-csv "c:\temp\log.txt" -Header DateLog, TimeLOg, Code -Delimiter ' ' |where code -ne "0").Code -join "`n" $wshell = New-Object -ComObject WScript.Shell $wshell.Popup($code, 0, "Test", 0) 的列,它包含'DATETIME'之类的值。前8个字符是日期,后4个字符是时间。现在,我需要创建一个名为'201701011730'的列以及一个名为'TIME'的列来替换'DATE'。示例如下所示:

'DATETIME'

我正在尝试使用带有CONVERT函数的更新语句,但它不起作用。有任何建议可以使用吗?

4 个答案:

答案 0 :(得分:2)

假设您的合并列名为dattimCol,您可以执行以下操作:

select convert(date, left(dattimCol,8)) [date],
       convert(time, stuff(substring(dattimCol,9,4),3,0,':')) [time]
from yourTable;

在转换之前将':'插入时间字符串非常重要。

作为更新声明,转换为:

update yourTable SET 
       dateCol=convert(date, left(dattimCol,8)),
       timeCol=convert(time, stuff(substring(dattimCol,9,4),3,0,':'));

好的,这里有一些简短的解释,首先是substring()

substring(dattimCol,9,4)

(我本可以使用right(dattimCol,4)代替)将获得表示时间(“1730”)的日期时间字符串的最后4位数字。然后我使用stuff()函数(至少从SQL-server 2005开始提供)在结果字符串的中间“填充”一个冒号(“:”)

stuff( sourceString, beginInsertionAtPosition, countOfCharsToDelete, insertionString )

答案 1 :(得分:0)

尝试如下:

CREATE  TABLE DATES(DATETIME VARCHAR(20))
INSERT INTO DATES VALUES('201701011730')
INSERT INTO DATES VALUES('201801011740')
SELECT * FROM DATES
ALTER TABLE DATES ADD [DATE] VARCHAR(8)
ALTER TABLE DATES ADD [TIME] VARCHAR(4)

DECLARE @DATETIME VARCHAR(MAX)
DECLARE C CURSOR FOR 
SELECT DATETIME FROM DATES
OPEN C
FETCH NEXT FROM C INTO @DATETIME
WHILE @@FETCH_STATUS=0
BEGIN
UPDATE DATES SET DATE=(SELECT SUBSTRING(DATETIME,0,9) FROM DATES WHERE DATETIME=@DATETIME) WHERE DATETIME=@DATETIME
UPDATE DATES SET TIME=(SELECT SUBSTRING(DATETIME,9,LEN(DATETIME)) FROM DATES WHERE DATETIME=@DATETIME) WHERE DATETIME=@DATETIME
FETCH NEXT FROM C INTO @DATETIME
END
CLOSE C
DEALLOCATE C

SELECT * FROM DATES

答案 2 :(得分:0)

我使用下面的代码显示了您可以使用以下代码的示例

Create Table #ABC(T1 NVARCHAR(500),date nvarchar(255),Time nvarchar(255))
  Insert Into #ABC(T1) Values ('201701011730')

 Update #ABC
 SET date=SUBSTRING(T1,0,9), Time=SUBSTRING(T1,9,LEN(t1))

我认为您使用字符串格式而不是日期和时间格式以获取更多信息,您可以访问以下链接

http://www.w3schools.com/sql/func_convert.asp

https://msdn.microsoft.com/en-us/library/ms187928.aspx

答案 3 :(得分:0)

-----声明@datetime_str变量,其中以字符串格式设置日期时间

Declare @datetime_str varchar(20);
set @datetime_str='201701011730';
select SUBSTRING(@datetime_str,0,9) as date, SUBSTRING(@datetime_str,9,12) as time

--------------------或-------------------

select SUBSTRING('201701011730',0,9) as date, SUBSTRING('201701011730',9,12) as time