我正在使用一个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函数的更新语句,但它不起作用。有任何建议可以使用吗?
答案 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))
我认为您使用字符串格式而不是日期和时间格式以获取更多信息,您可以访问以下链接
答案 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