J'essaie d'obtenir le code ci-dessous fonctionner, individuellement les deux pièces de code (dans le "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 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> 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
(code> alors si elle est inférieure à 24 puis utilisez le
. Sinon code> Déclaration. 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]
9 Réponses :
Vous devez fermer votre cas code> instruction code> xxx pré> p>
Il devrait y avoir un extrémité code> avant la clause
de code> et vous devez également supprimer
( code> avant
couler code>. < / p>
La fonction droite () n'a pas de second paramètre ou: vous avez manqué la parenthèse finale derrière comme décimale p>
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)
Des parenthèses non clopées et une déclaration de cas devaient une fin.
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. P>
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: p>
lire plus ici: http : //blog.sqlauthority.com/2007/04/14/sql-server-Case-StatementExpression-examples-and-Explanation/ P>
Voici la version corrigée de votre code: 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. P> P>
Il y a 2 erreurs dans le code. à p>
premier fort>, vous avez une parenthèse supplémentaire devant la distribution qui n'est pas nécessaire (et n'est pas fermée jamais). Changer
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:
(Convertir (flotteur, datrodiff (MI, start_work, end_work)) / 60)> = '24' ne doit pas avoir citations autour de 24.