Sql-Server
TSQL 提取時間值並重新格式化,同時排除非數字,例如 ‘Apr 2 2018 12:36PM’ to ‘1236’
我有一個 nvarchar 欄位,其中包含格式為“Apr 2 2018 12:36PM”的日期和時間數據,我需要將值提取為“1236”。雖然我使用了子字元串和右的組合,但我仍然需要刪除“:”和“上午或下午”,並替換小時小於 2 位的前導空格,例如 0500。此 TSQL 將作為最後一個集成現有多重案例(如下所示)中的一段邏輯,當邏輯從實際日期時間欄位中提取時間時成功使用 TSQL 案例。任何幫助將非常感激。感謝您的時間
CASE WHEN Format(CAST(dbo.FieldSurveyData.TimeTestin AS datetime) , 'HHmm' , 'en-au') > 0 THEN Format(CAST(dbo.FieldSurveyData.TimeTestin AS datetime) , 'HHmm' , 'en-au') WHEN Format(CAST(dbo.FieldSurveyData.TimeStartP AS datetime) , 'HHmm' , 'en-au') > 0 THEN Format(CAST(dbo.FieldSurveyData.TimeStartP AS datetime) , 'HHmm' , 'en-au') WHEN Format(CAST(dbo.FieldSurveyData.TimeStar_1 AS datetime) , 'HHmm' , 'en-au') > 0 THEN Format(CAST(dbo.FieldSurveyData.TimeStar_1 AS datetime) , 'HHmm' , 'en-au') WHEN Format(CAST(dbo.FieldSurveyData.TimeFini_2 AS datetime) , 'HHmm' , 'en-au') > 0 THEN Format(CAST(dbo.FieldSurveyData.TimeFini_2 AS datetime) , 'HHmm' , 'en-au') ELSE '' END
假設您的值都是一致的,並且您正在尋找一個單行(因為使用變數會更簡單),您應該能夠使用以下內容:
FORMAT(CONVERT(INT, REPLACE(REPLACE(REPLACE(LTRIM(RIGHT(YourField, 7)), 'AM', ''), 'PM', ''), ':', '')), '0000')
這是相同的多行格式程式碼:
FORMAT ( CONVERT ( INT, REPLACE ( REPLACE ( REPLACE ( LTRIM ( RIGHT(YourField, 7) ), 'AM', '' ), 'PM', '' ), ':', '' ) ), '0000' )
任你選。🙂
順便說一句,SQL Server 2012 現在已經結束生命(實際上只是延長了大約 7 個月的支持)。如果您要升級到較新的版本(2017 或更高版本),您將可以訪問可用作單個函式呼叫而不是三個函式呼叫的
TRANSLATE()
函式REPLACE()
。從理論上講,這應該更高效,但程式碼也更少冗長,使其更具可讀性和可維護性。只是一些思考的食物。