sql >> Databáze >  >> RDS >> Sqlserver

Převod se nezdařil při převodu hodnoty varchar v příkazu case

Při použití CASE musí mít všechny výsledné výrazy stejný datový typ. Pokud ne, bude výsledek převeden na datový typ s vyšší prioritou. Podle BOL :

Od INT má vyšší přednost datového typu než VARCHAR , "Weeks" převést na INT a to způsobí chybu:

Další příklad, který způsobí stejnou chybu:

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

Řešením je převod RS.intInterval na VARCHAR :

CONVERT(VARCHAR(10), RS.intInterval)

Váš poslední dotaz by měl znít:

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 jako spojení, ale potřebujete pouze nejnovější řádek?

  2. room error:Sloupce vrácené dotazem nemají pole název_pole

  3. Problém s vkládáním MySQL do Node.js

  4. Jak optimalizovat dotaz Oracle, který má v klauzuli where pro datum to_char