11
votes

SQL, syntaxe incorrecte sur la déclaration de cas près du mot clé "de"

J'essaie d'obtenir le code ci-dessous fonctionner, individuellement les deux pièces de code (dans le lorsque CODE> pièce et la partie ele code> partie) ne fonctionne que lorsqu'il est utilisé dans cette Case Code> Déclaration I Obtenir une erreur

"Syntaxe incorrecte près de" Cast ", attendue" comme "." erreur. p> blockQuote>

Fondamentalement si le code code> lorsque le code des instructions code> est égal à ou supérieur à 24, utilisez l'instruction (code> alors si elle est inférieure à 24 puis utilisez le . Sinon code> Déclaration. P>

Je ne peux pas sembler avoir ceci pour travailler après avoir essayé plusieurs heures à une indication de l'endroit où je vais vous tromper serait grandement apprécié. P>

SELECT CASE 
        WHEN 
            (convert(float,datediff(mi, start_work, end_work))/60) >= '24'
        THEN
            (convert(float,datediff(mi, start_work, end_work))/60)
        ELSE
            (CAST(convert(varchar(2), dateadd(minute, datediff(minute, start_time, end_time), 0), 114) 
            * 60 + RIGHT (convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114),
            CASE WHEN CHARINDEX(':',convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114)) > 0
            THEN LEN(convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114))-3
            ELSE LEN(convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114))
            END) AS decimal) / 60
FROM  NDB.dbo.statusa 
INNER JOIN NDB.dbo.details ON statusa.vkey = details.vkey
INNER JOIN NDB.dbo.chegu ON statusa.ckey = NDB.dbo.chegu.gkey
WHERE start_time!= end_time AND string1 = Visit_Id and NDB.dbo.chegu.name = 'loft'
     AS [Working]


1 commentaires

(Convertir (flotteur, datrodiff (MI, start_work, end_work)) / 60)> = '24' ne doit pas avoir citations autour de 24.


9 Réponses :


14
votes

Vous devez fermer votre cas instruction xxx


0 commentaires

10
votes

Il devrait y avoir un extrémité avant la clause de et vous devez également supprimer ( avant couler . < / p>


0 commentaires

2
votes

La fonction droite () n'a pas de second paramètre xxx

ou: vous avez manqué la parenthèse finale derrière comme décimale xxx


0 commentaires

5
votes

Il n'y a pas de parenthèse de fermeture.

SELECT CASE 
    WHEN 
        (convert(float,datediff(mi, start_work, end_work))/60) >= '24'
    THEN
        (convert(float,datediff(mi, start_work, end_work))/60)
    ELSE
        (CAST(convert(varchar(2), dateadd(minute, datediff(minute, start_time, end_time), 0), 114) 
        * 60 + RIGHT (convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114),
        CASE WHEN CHARINDEX(':',convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114)) > 0
        THEN LEN(convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114))-3
        ELSE LEN(convert(varchar(5), dateadd(minute, datediff(minute, start_time, end_time), 0), 114))
        END) AS decimal) / 60)


0 commentaires

5
votes

Des parenthèses non clopées et une déclaration de cas devaient une fin. XXX


0 commentaires

4
votes

Deux formulations de base pour l'expression de cas 1) expressions de cas simples Une expression de cas simple vérifie une expression contre plusieurs valeurs. Dans une instruction SELECT, une simple expression de cas permet uniquement une vérification de l'égalité; Aucune autre comparaison n'est faite. Une expression de cas simple fonctionne en comparant la première expression à l'expression dans chaque clause d'équivalence. Si ces expressions sont équivalentes, l'expression de la clause alors sera renvoyée.

2) Expressions de cas recherchés Une expression de cas recherchée permet aux opérateurs de comparaison et à l'utilisation de et / ou ou entre chaque expression booléenne. L'expression de cas simple ne vérifie que des valeurs équivalentes et ne peut pas contenir des expressions booléennes. La syntaxe de base d'une expression de cas recherchée est indiquée ci-dessous:

lire plus ici: http : //blog.sqlauthority.com/2007/04/14/sql-server-Case-StatementExpression-examples-and-Explanation/


0 commentaires

2
votes

Voici la version corrigée de votre code: XXX

Fondamentalement, vous avez eu une extrémité manquante dans l'instruction SELECT..CASE et l'alias de colonne sélectionné [Travailler] a été mis à tort à la fin de la requête plutôt que dans la clause Select de la requête.


0 commentaires

4
votes

Il y a 2 erreurs dans le code.
premier , vous avez une parenthèse supplémentaire devant la distribution qui n'est pas nécessaire (et n'est pas fermée jamais). Changer xxx

à xxx

secondaire: Ajouter fin à la fin de l'instruction CASE AVANT LE MOT-MOTH (comme @gefei pointe ci-dessus aussi). Votre code final devrait ressembler à ce qui suit: xxx


0 commentaires

5
votes

J'ai réalisé que cette réponse est trop tard pour la récompense. Mais votre script est beaucoup trop long. Cela fera exactement la même chose que vous essayez de réaliser, de fixer l'erreur dans votre code, ne fait que correctement le code Bad: xxx


0 commentaires