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

caseステートメントでvarchar値を変換するときに変換に失敗しました

    CASEを使用する場合 ステートメントでは、すべての結果式は同じデータ型である必要があります。そうでない場合、結果はより高い優先順位のデータ型に変換されます。 BOL によると :

    INT以降 データ型の優先順位 が高い VARCHARより 、"Weeks" INTに変換されます エラーが発生します:

    同じエラーが発生する別の例:

    SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 0 END
    

    解決策は、RS.intIntervalを変換することです VARCHARへ :

    CONVERT(VARCHAR(10), RS.intInterval)
    

    最終的なクエリは次のようになります:

    DECLARE @bFlag bit
    SET @bFlag = 0
    SELECT  something = CASE
                    WHEN @bFlag = 1 THEN
                        CASE
                            WHEN RS.intInterval = 1 THEN '"Days"'
                            WHEN RS.intInterval = 2 THEN '"Weeks"'
                            WHEN RS.intInterval = 3 THEN '"Months"'
                            WHEN RS.intInterval = 4 THEN '"Years"'
                        END
                    Else 
                        CONVERT(VARCHAR(10), RS.intInterval)
                    End
    from    MyTable  AS RS WITH (NOLOCK)
    



    1. MySQLで英数字以外の文字のみを含む行を返す2つの方法

    2. PHPクエリが実行されていませんか?

    3. 新規インストール後にPostgresqlにログインして認証するにはどうすればよいですか?

    4. テーブル内の重複する行を削除するにはどうすればよいですか