Sql-Server

REPLACE() 函式接受並返回非字元數據類型

  • June 17, 2022

Microsoft 文件表明REPLACE() 函式只接受並返回字元數據類型。但是,這些工作沒有錯誤:

SELECT   REPLACE(123456, 'X', 'Y')
;

SELECT   REPLACE(CAST(123456 AS INT), 'X', 'Y')
;

此外,您可以將結果視為 INT,這表明該函式保留了參數的數據類型而不嘗試對其進行轉換:

SELECT   REPLACE(123456, 'X', 'Y') / 3
;

Microsoft 文件中沒有說明什麼?

為了補充 Erik 在他的評論中所說的內容,無論您想將參數顯式定義為哪種數據類型,函式內部參數的定義都REPLACE()被定義為採用string_expression.

這意味著,無論如何,它都會將參數隱式轉換為基於字元串的數據類型。該數據類型取決於實際傳入的內容 - SQL 引擎有一些邏輯和層次結構,它遵循可以隱式轉換為另一種類型的內容,這可能遵循以下數據類型轉換圖表:

在此處輸入圖像描述

如果您嘗試了無法隱式轉換的不兼容類型,例如XML對象,則該REPLACE()函式會出錯。

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