sql >> データベース >  >> RDS >> Sqlserver

T-SQL ISNULL()が文字列を切り捨て、COALESCEが切り捨てないのはなぜですか?

    Microsoftによるとドキュメント 、関数の場合:

    ISNULL(check_expression, replacement_value)
    

    replacement_value check_expressionのタイプに暗黙的に変換可能なタイプである必要があります 。 'xy'+NULLのタイプに注意してください VARCHAR(3)です 。このため、文字列'ABCDEFGHIJ' VARCHAR(3)にキャストされます したがって、トリミングされます。

    VARCHAR(2)ではない理由は奇妙に聞こえます 、しかしこれはその通りです-'xy'より1文字長い 。このSQLFiddle で遊ぶことができます 'xy'+NULLのタイプを自分で確認してください 式CASE WHEN 1=2 THEN 'XYZ' ELSE NULL ENDの場合と同じです。 、これはNULL ただし、VARCHAR(3)と暗黙的に互換性があります 。

    'xy'+NULLのようです 知覚される長さは、'xy'として計算できます。 文字列の長さ(2)プラスNULLごとに1 追加した。たとえば、'xy'+NULL+NULLのタイプ VARCHAR(4)です 、'xy'+NULL+NULL+NULLと入力します VARCHAR(5)です など-このSQLFiddle を確認してください。 。これは非常に奇妙なことですが、それがMS SQLServer2008および2012の動作方法です。



    1. PHP MySQLutf8エンコーディング

    2. Oracleのトラブルシューティング-ハングしたプロセス

    3. Oracle ODP.Net With EntityFramework6-エンティティフレームワークデータベースと互換性のあるプロバイダーが見つかりませんでした

    4. WooCommerceで注文の詳細を含むクーポンを一覧表示します