我需要在 CONCAT 函式中將數字格式更改為“AM/PM”格式(我使用 SSMS v 18.5.1)
這是我的公式。RCLDTE - 是日期,RCLTIM 是時間。我基本上需要保持 RCLDTE 不變并將 RCLTIM 的格式從數字更改為日期并轉換為 AM/PM 格式。

該列現在的樣子

RCLTIM 的格式 - 數字

CONCAT(c.RCLDTE, ' & ', MAX(c.RCLTIM)) AS 'Date & Time',
當我嘗試使用我傾向于使用的 CONVERT 函式時,它引發了一個錯誤。
CONCAT(c.RCLDTE, ' & ', CONVERT(varchar(15),CAST( MAX(c.RCLTIM) AS TIME),100))
錯誤
不允許從資料型別數字到時間的顯式轉換。
uj5u.com熱心網友回復:
您嘗試做的事情非常脆弱,但我認為您的源系統給您的選擇很少。
像這樣的轉換對 DST 和運行時使用的語言有潛在的問題。
您的問題丟失了有關格式的一些詳細資訊,因此我看不到您使用的時間型別,但它看起來又像小數。
本質上,您需要將數字放入字串中,然后放入日期時間列中,但要到達那里,您必須匹配 sqlserver 的字串轉換格式。幸運的是,您離我們的默認格式不遠了。
像這樣的東西會給你一個日期欄位,如果你真的需要 12 小時而不是 24 小時,你可以修改輸出格式。
SET LANGUAGE us_english
DECLARE @rcldte NUMERIC, @rcltim numeric
SET @rcldte=20220119
SET @rcltim = 015250
SELECT
CONVERT(DATETIME, CAST (@rcldte AS VARCHAR) ' '
LEFT( left('000000', 6-LEN(CAST ( @rcltim AS VARCHAR))) CAST ( @rcltim AS VARCHAR),2)
':' substring( left('000000', 6-LEN(CAST ( @rcltim AS VARCHAR))) CAST ( @rcltim AS VARCHAR),3,2)
':' RIGHT( left('000000', 6-LEN(CAST ( @rcltim AS VARCHAR))) CAST ( @rcltim AS VARCHAR),2))
這會給你:
(No column name)
2022-01-19 01:52:50.000
不過還是比較丑的。如果您可以保證小時數為零,那么您可以消除與之相關的復雜性。如果你真的要使用它,然后拆分成適當的 UDF ......
uj5u.com熱心網友回復:
DECLARE @RCLDTE CHAR(8) = '20220119';
DECLARE @RCLTIM CHAR(6) = '215250';
select CONVERT(VARCHAR(21), (cast(@RCLDTE as DATETIME) cast(substring(@RCLTIM,1,2) ':' substring(@RCLTIM,3,2) ':' substring(@RCLTIM,5,2) as DATEtime) ), 22);
輸出:01/19/22 9:52:60 PM
有關 DATETIME 的不同格式,請參閱 CONVERT 函式的檔案:
https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql?view=sql-server-ver15
注意:當指定另一種格式時,值 21 inVARCHAR(21)可能需要更改...
uj5u.com熱心網友回復:
日期的數字可以連接到用冒號填充的時間的數字。以便可以將其轉換為DATETIME.
并且通過使用FORMATDATETIME可以以特定格式放置。
(但如果它具有格式,請使用CONVERT 。)
測驗片段
declare @test table ( ID INT IDENTITY PRIMARY KEY, RCLDTE int, RCLTIM int ); insert into @test (RCLDTE, RCLTIM) values (20220119, 215250) , (20220304, 070809) ; select FORMAT(TRY_CAST(CONCAT(c.RCLDTE, ' ', STUFF(STUFF(FORMAT(MAX(c.RCLTIM),'000000'),5,0,':'),3,0,':')) AS DATETIME) , 'd/M/yyyy hh:mm:ss tt') AS [Date & Time] from @test c group by RCLDTE;
約會時間 2022 年 19 月 1 日晚上 9 點 52 分 50 秒 2022 年 4 月 3 日上午 07:08:09
在這里測驗db<>fiddle
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446846.html
