sql >> Databasteknik >  >> RDS >> Sqlserver

Konverteringen misslyckades när varchar-värdet konverterades i case-satsen

När du använder CASE sats måste alla resultatuttryck ha samma datatyp. Om inte kommer resultatet att konverteras till datatypen med högre prioritet. Enligt BOL :

Sedan INT har en högre datatypsprioritet än VARCHAR , "Weeks" konverteras till INT och det ger felet:

Ett annat exempel som ger samma fel:

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

Lösningen är att konvertera RS.intInterval till VARCHAR :

CONVERT(VARCHAR(10), RS.intInterval)

Din sista fråga bör vara:

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. SQL-serverlogg, leverans och katastrofåterställning, installation och konfiguration -3

  2. Hur man schemalägger en lagrad procedur i MySQL

  3. Hitta Long/Lat inuti polygonen med MySQL 5.6

  4. Gruppera mysql resulterar i grupper om fyra