正确的时间SQL

时间:2017-06-16 13:41:03

标签: sql

我在其中一个表中有这样的时间格式:HH:MM SS

时间栏的例子(像这样我有1百万条记录):

 Time
 -------
 10:18 55
 10:20 17
 07:12 23
 11:38 27
 14:16 51
 10:24 16

我希望格式为:HH:MM:SS

 Time
 -------
 10:18:55
 10:20:17
 07:12:23
 11:38:27
 14:16:51
 10:24:16

我写的这样做的查询如下:

DECLARE @Query VARCHAR(MAX)
DECLARE @colname VARCHAR(max)
DECLARE colcursor CURSOR
FOR
 SELECT time_1 FROM table1 WHERE time_1 like '[0-9][0-9]:[0-9][0-9] [0-9]
 [0-9]'
OPEN colcursor;
FETCH NEXT FROM colcursor INTO @colname
WHILE @@FETCH_STATUS = 0

 SET @Query = 'update table1 set time_1' + '=' + 'cast(cast(replace(' + 
   @colname + ','+ ' ' + ',' + ':'+ ') as time) as char(8))'

 EXECUTE (@Query);
  FETCH NEXT FROM colcursor INTO @colname;

CLOSE colcursor;
DEALLOCATE colcursor;

问题是这是继续执行而没有任何改变所需的输出。我不认为,这应该花更多的时间。有谁可以帮助如何获得所需的输出(即,以HH:MM:SS格式)?

3 个答案:

答案 0 :(得分:1)

我不知道你为什么使用动态sql。 它看起来比你写的要简单得多

试试这个

Update table1
set time_1 = replace(time_1, ' ', ':')

答案 1 :(得分:0)

UPDATE table1 
SET time_1  =REPLACE(time_1 ,' ',':')
WHERE time_1 like '[0-9][0-9]:[0-9][0-9] [0-9][0-9]'

答案 2 :(得分:0)

IF OBJECT_ID('Tempdb..#Temp') IS NOT NULL
Drop  table #Temp
;With cte([Time])
AS
(
SELECT '10:18 55' UNion all
SELECT '10:20 17' UNion all
SELECT '07:12 23' UNion all
SELECT '11:38 27' UNion all
SELECT '14:16 51' UNion all
SELECT '10:24 16' 
) 
SELECT * INTO #Temp From cte

SELECT * FRom #Temp --check time data Before Updating the table

Update I
SET [Time] = STUFF(i.[Time],CHARINDEX(' ',i.[Time]),1,':')
From #Temp I
Inner join #Temp O
On i.[Time]=o.[Time]

SELECT * FRom #Temp ---check time data After Updating the table