最近、最初の文字列がnullの場合、ISNULL
関数が切り捨てられたデータを返すというシナリオに直面しました。SQL ServerのISNULL関数での切り捨ての問題
ISNULL(a, b);
私はaが5つの文字であり、bは10文字ですが、nullであるとき、それはB、完全ではない長さのわずか5文字を返します発見しました。
これは既知の問題ですか?
最近、最初の文字列がnullの場合、ISNULL
関数が切り捨てられたデータを返すというシナリオに直面しました。SQL ServerのISNULL関数での切り捨ての問題
ISNULL(a, b);
私はaが5つの文字であり、bは10文字ですが、nullであるとき、それはB、完全ではない長さのわずか5文字を返します発見しました。
これは既知の問題ですか?
それは既知の動作check_expressionの値は、それがNULLでない場合に返されるMSDN
から
です。 それ以外の場合は、暗黙的に が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でCASEを使用することができます@Prdp答えに。
CASE WHEN a is null then b else a end AS caseWhen_Result
任意の変数があるかどうかを確認します。サイズが5の場合のみ宣言します。 –