質問: T-sqlで 0以上の数値があれば+の記号を付けたいです。 例:number が5の場合 +5と表示させたい case when number >=0 then '+' + CONVERT(varchar(2),number) else number end この状態ではエラーはでないのですが、出力が数値になり+が消えてしまっております。
回答: 「CASE (Transact-SQL)」によると、CASE式の戻り値の型は以下のルールで決まるようです。 > > result_expressions および省略可能な else_result_expression の一連の型から、最も優先順位の高い型を返します。 > > > numberの型はINTという前提にたつと、対象のCASE式はINTまたはVARCHARの値を返します。ここで「データ型の優先順位 (Transact-SQL)」を見ると、VARCHARよりINTのほうが優先度が高いことがわかります。 よって作成された`+5`というVARCHARの値が暗黙の型変換の結果、INTになり、符号がとれたように見えるのだと思います。 解決策はいろいろあると思いますが、たとえばELSE節の型がVARCHARになるよう明示するなどがあります。 ``` CASE WHEN number >= 0 THEN '+' + CONVERT(VARCHAR(2),number) ELSE CONVERT(VARCHAR(2),number) END ```