這是很難解釋,但基本上我有時間值的列表作爲VARCHAR格式如下:更新SQL Server中單個列的時間值列表?
我需要轉換這些讓每個變得12:00:00之間的差異該字段中的值只使用UPDATE命令?
你會如何在TSQL中處理這種情況?因爲它是一個VARCHAR,我們沒有日期部分我想我們不能使用任何日期函數?
這是很難解釋,但基本上我有時間值的列表作爲VARCHAR格式如下:更新SQL Server中單個列的時間值列表?
我需要轉換這些讓每個變得12:00:00之間的差異該字段中的值只使用UPDATE命令?
你會如何在TSQL中處理這種情況?因爲它是一個VARCHAR,我們沒有日期部分我想我們不能使用任何日期函數?
使用CONVERT(datetime,@varchar,14)功能,而不爲日期部分關注VARCHAR和日期之間切換。
SELECT CONVERT(varchar(8), CONVERT(datetime,'12:00:00',14)-CONVERT(datetime,'9:19:4',14) ,14)
真棒謝謝你,我在我的SET語句中使用了SELECT之後的那個位,它工作完美:-) – Apqu
鑑於您指定的12小時限制,以下內容應該可以工作。 您可能需要調整模式的Varchar長度。
t.dt =您的表格和列名稱。
LEFT(CAST(DATEADD(SECOND, DATEDIFF(SECOND, CAST('12:00:00' as time), CAST(t.dt as time))*-1, CAST('00:00:00' as time))as VARCHAR(20)),8) as newtime
因此,一個潛在的更新將如下所示:
UPDATE t
SET t.dt = LEFT(CAST(DATEADD(SECOND, DATEDIFF(SECOND, CAST('12:00:00' as time), CAST(t.dt as time))*-1, CAST('00:00:00' as time))as VARCHAR(20)),8)
這裏是有許多工作要做, 1)轉換時間列的實際時間數據類型 2)使用轉換,這可以實現簡單的減法運算。
下面是簡單的代碼(測試):
select
convert(time(0),
((convert(datetime, '12:00:00')- convert(datetime, time))), 8) as TimeDiff
from
times
時間數據類型可用於> = SQL2008 – Anon
你需要從'12:00:00 AM'或'12:00:00 PM'的區別?表中的數值代表12小時制還是24小時制? – pete
第一個值應該是1:37:20,如果這有幫助的話,那麼表中的值只會上升到11:59:59。 – Apqu
所以你想(第一個值)'12:00:00 PM - 10:22:40 AM'?其餘的「AM」值是什麼?你是否總是從'12:00 PM'(又名中午)減去? – pete