最近我遇到了ISNULL
函數在第一個字符串爲空的情況下返回截斷數據的場景。SQL Server中ISNULL函數的截斷問題
ISNULL(a, b);
我找到了一個是5個字符,b爲10個字符,但是當一個爲空,將返回只有5個字符B和不充分的長度。
這是一個已知的問題?
最近我遇到了ISNULL
函數在第一個字符串爲空的情況下返回截斷數據的場景。SQL Server中ISNULL函數的截斷問題
ISNULL(a, b);
我找到了一個是5個字符,b爲10個字符,但是當一個爲空,將返回只有5個字符B和不充分的長度。
這是一個已知的問題?
這是一個衆所周知的行爲
從MSDN
如果不是,則返回NULL check_expression的價值; 否則,在隱式地將 轉換爲check_expression類型後,如果類型不同,則返回replacement_value。 如果replacement_value長於 check_expression,則可以截斷replacement_value。
使用COALESCE
過度來到這個問題
SELECT COALESCE(a, b) From yourtable
這裏是一個演示
CREATE TABLE #nulltest
(
a CHAR(5),
b CHAR(10)
)
INSERT INTO #nulltest
VALUES ('12345','1234567890'),
(NULL,'1234567890')
SELECT a,
b,
ISNULL(a, b) AS Isnull_Result,
COALESCE(a, b) AS Coalesce_Result
FROM #nulltest
結果:
╔═══════╦════════════╦═══════════════╦═════════════════╗
║ a ║ b ║ Isnull_Result ║ Coalesce_Result ║
╠═══════╬════════════╬═══════════════╬═════════════════╣
║ 12345 ║ 1234567890 ║ 12345 ║ 12345 ║
║ NULL ║ 1234567890 ║ 12345 ║ 1234567890 ║
╚═══════╩════════════╩═══════════════╩═════════════════╝
您也可以使用情況,即隨着additi對@Prdp答案。
CASE WHEN a is null then b else a end AS caseWhen_Result
檢查是否有任何變量聲明大小隻有5 ... –