我有以下日期格式92845
,它們代表hhmmss
。T-SQL日期轉換
我想將其轉換爲SQL中的datetime
。
我可以用這樣的:
SELECT STUFF(STUFF('84936',3,0,'-'),6,0,'-')
,但似乎T-SQL不順心的hour
部分。
謝謝!
我有以下日期格式92845
,它們代表hhmmss
。T-SQL日期轉換
我想將其轉換爲SQL中的datetime
。
我可以用這樣的:
SELECT STUFF(STUFF('84936',3,0,'-'),6,0,'-')
,但似乎T-SQL不順心的hour
部分。
謝謝!
好像你在下午編寫了代碼,現在它在早上不工作。如果你打算基於絕對定位,你需要確保字符串總是相同的長度。一種方法是用0填充字符串,然後取最右邊的6個字符。另外,您需要:
而不是-
用於H/M分離器。
SELECT STUFF(STUFF(RIGHT('0' + '84936', 6),3,0,':'),6,0,':');
結果:
08:49:36
現在,它可以轉化爲一個日期時間:
SELECT CONVERT(DATETIME, STUFF(STUFF(RIGHT('0' + '84936', 6),3,0,':'),6,0,':'));
結果:
1900-01-01 08:49:36.000
你的答案值得投票 – AnandPhadke
我不知道在哪裏92845
目前存儲。如果它是一個變量,那麼像這樣將工作:
declare @t varchar(6) = '92845';
declare @fullt char(6) = RIGHT('000000' + @t,6)
select DATEADD(second,
SUBSTRING(@fullt,1,2) * 3600 +
SUBSTRING(@fullt,3,2) * 60 +
SUBSTRING(@fullt,5,2),0)
結果:
1900-01-01 09:28:45.000
如果它在結果集的一列,那麼你可以做使用例如類似操作子查詢。
試試這個:
declare @t varchar(6) = '134524'
select CASE WHEN len(@t)=5 then convert(datetime,convert(varchar(10),CAST(getdate() as date))+' '+'0'+LEFT(@t,1)+':'+SUBSTRING(@t,2,2)+':'+SUBSTRING(@t,4,2))
else convert(datetime,convert(varchar(10),CAST(getdate() as date))+' '+LEFT(@t,2)+':'+SUBSTRING(@t,3,2)+':'+SUBSTRING(@t,5,2)) end
你嘗試過一次'134524'嗎? –
@ Aaron-這真的是一個很好的catch.I編輯腳本請檢查 – AnandPhadke
哇,沒有進攻,但這是不必要的複雜。爲什麼你還會選擇日期?我們知道OP是2008+嗎? –
什麼是一天,一個月,一年?此外,我沒有看到你在你提供的代碼中轉換爲'datetime'的位置。問題是什麼? SQL「不喜歡」什麼?是否有錯誤訊息? – cadrell0
當你有興趣從字符串的右端(如這裏)而不是左端工作時,SQL Server的字符串操作函數是有限且重複的。你真的沒有選擇a)這個字符串到達的格式,和b)必須在T-SQL中重新格式化嗎? –