1

SQLServer2005を使用しています。TINYINTフィールドから選択しようとしています。フィールドの値が0の場合、代わりに空の文字列を選択します''。フィールド名はレベルです。これが私がしていることです:

SELECT 
[Level] = 
Case 
t.[Level]
    WHEN 0 THEN ' '
    ELSE t.[Level]
END
FROM table t 

このコードは常に0を返します。問題のトラブルシューティングを試みて、これを試しました。

SELECT 
[Level] = 
Case 
t.[Level]
    WHEN 0 THEN 'test'
    ELSE t.[Level]
END
FROM table t 

そして、私はエラーが発生しましたConversion failed when converting the varchar value 'test' to data type tinyint

したがって、ここに変換の問題があることがわかります。私はもう試した:

SELECT 
[Level] = 
Case 
t.[Level]
    WHEN 0 THEN CONVERT(VARCHAR,t.[level])
    ELSE t.[Level]
END
FROM table t 

しかし、これはもちろん、文字だけで0を返すので、必要なことをまだ実行していません。私はこれを行うためのより良い方法がある可能性が高いと考えていますが、それにアプローチする方法がわかりません。誰かがこれを処理する方法について私にいくつかのアドバイスを与えることができますか?どうもありがとう!

4

2 に答える 2

3

CASEステートメントの場合、すべての戻り値は同じタイプ(または自動的に変換可能)である必要があります。''それが働いていた理由ですが、そうではありませ'test'んでした。

SELECT [Level] = 
Case t.[Level]
    WHEN 0 THEN ' '
    ELSE CONVERT(VARCHAR(3), t.[Level])
END
FROM table t 
于 2012-08-09T13:52:46.290 に答える
1

これを修正する試みは間違った方向に進みました。varcharの空の文字列と一致するように、else部分をvarcharに変換する必要がありました。

SELECT 
[Level] = 
Case 
t.[Level]
    WHEN 0 THEN ''
    ELSE CAST(t.[Level] AS VARCHAR(10))
END
FROM table t 
于 2012-08-09T13:51:12.653 に答える