Sql-Server

如何將 DateTime 連接到 nvarchar 欄位

  • July 2, 2018

我有一個帶有 nvarchar(32) 列的表,我想用表上另一個欄位的前 10 個字節更新此列中的值,該欄位在我想連接第一個字節的 10 個字節之後定義為 nvarchar(32)目前日期時間的 22 個字節,日期中沒有破折號。

Update Bil_ReturnsRepository 
 Set PaymentReference = CAST((Left(PolicyNumber, 10) + CONVERT(datetime,GETDATE(), 121)) as nvarchar
Where PolicyNumber = '1234567890'

我希望輸出看起來像這樣,例如:

1234567890201802130446386883

沒有標點符號和最多 7 秒小數的日期時間是 21 位數字,因此仍然缺少 1 個字元 (32 - 10 - 21)。

您可以使用以下內容來格式化您想要的方式。

Update Bil_ReturnsRepository Set 
   PaymentReference = CONVERT(NVARCHAR(32), 
       CONCAT(
           LEFT(PolicyNumber, 10), 
           FORMAT(SYSDATETIME(), 'yyyyMMddHHmmssfffffff0')))
Where 
   PolicyNumber = '1234567890'

如果PolicyNumber已經NVARCHAR存在,則無需進行顯式CONVERT. 請注意,我硬編碼了最後一個零。

雖然FORMAT()可能更易讀,但性能損失很大(在我的測試中約為 2 倍)。如果這是你要做一次的事情,請繼續。如果這是你要重複的事情,特別是當這個表變大時,這應該允許你擴展大約兩倍:

UPDATE dbo.Bil_ReturnsRepository 
 SET PaymentReference = LEFT(PolicyNumber, 10) 
   + REPLACE(REPLACE(CONVERT(char(8), sysdatetime(), 112)
   + CONVERT(char(14), sysdatetime(), 14),':',''),'.','')
WHERE PolicyNumber = '1234567890';

引用自:https://dba.stackexchange.com/questions/211151