Je suis un débutant sur SQL Server. Aidez-moi s'il vous plaît à écrire la logique suivante dans une requête.
If getnow() > today 4 PM
Then
SELECT *
FROM table
WHERE MailDate is Tomorrow
Else
SELECT *
FROM table
WHERE MailDate is Today
8 Réponses :
Vous avez besoin d'une procédure stockée pour le faire dans SQL. Jetez un coup d'œil aux docs ici http: // msdn .microsoft.com / fr-US / US / Bibliothèque / AA174792 (V = SQL.80) .aspx P>
IF ( DATEDIFF(h, GETDATE(), DATEADD(h,4,GETDATE()))>0 ) SELECT * FROM table WHERE MailDate is Tomorrow ELSE SELECT * FROM table WHERE MailDate is Today This is MS SQL. If you want to do more then just one command/select inside the if you do BEGIN .... END.
Depuis quand MSSQL prend-il en charge MSSQL où maildate est demain code> ou où maildate est aujourd'hui code>? En outre, le est code> opérateur est destiné à comparer à null code>, rien d'autre.
@ROBIII Je viens de copier la dernière déclaration, je n'ai pas vu cela. Quoi qu'il en soit, il peut vous simplifier la même chose que j'ai écrit dans la clause Si, c'est juste la même chose
IF datepart(hh, getdate()) >= 16
BEGIN
SELECT *
FROM table
WHERE DateDiff(day, getdate(), MailDate) = 1
END
ELSE
BEGIN
SELECT *
FROM table
WHERE DateDiff(day, getdate(), MailDate) = 0
END
Pourquoi la moulée laidule de retour en arrière (avec la "magie Constant de style " (par exemple, 101 code>) Personne ne peut jamais se souvenir, Varchars, une timbre dans une chaîne comprenant un espace qui, sibliottenu, brisera tout, etc.) Si Il y a des fonctions DateTime?
@Robiii vous avez raison, il est corrigé. Je fournis juste une autre façon de le faire, mais je n'ai pas dit que c'était le meilleur moyen.
J'ai supprimé ma réponse depuis qu'ils sont maintenant essentiellement les mêmes. Mais je posterai la démo ici: sqlfiddle.com/#!3/96767/1 . Notez que vous voulez > = 16 code> sinon vous commencez à 17h.
@mellamokb merci d'avoir souligné le> = Évidemment j'ai manqué ça. Je n'ai pas réalisé qu'ils étaient la même chose après mon première modification. Je me sentais à la sourcie à enlever les convertis. Je sais qu'ils ne sont pas les meilleurs de convertir et d'aller de retour, je montrais juste une autre façon laid. :)
select *
from table
where DATEDIFF(day, GETDATE(), maildate) = case when
DATEPART(hour, GETDATE()) >= 16 then 1 else 0
end
Hey robiii, mon pote. Je voulais juste dire que je vous ai upvote, mais les bowvotes peuvent être le résultat des conversations de ce poste. Ne le prenez pas personnellement, nous pouvons tous apprendre toujours quelque chose :) N'oubliez pas de penser à penser à ce que vous dites lorsque vous le posez et considérez comment cela pourrait appartenir aux autres. I et d'autres d'autres personnes s'efforcent de faire une communauté amicale qui accueille tous les niveaux de compétence et donne à chacun une chance. On dirait que le vôtre a été marqué comme la réponse également, alors félicitations et passez une bonne journée!
Roblll, je t'ai précipité et si cela vous fait sentir mieux, je voudrais dire que j'ai mis en œuvre votre code car il avait l'air très efficace. Bien sûr, il m'a fallu un moment pour que je le comprenne. :) Merci beaucoup
IF DATEPART(HOUR, GETDATE()) > 16
BEGIN
-- SELECT statement
END
ELSE
BEGIN
-- SELECT statement
END
It does not have to be in a stored procedure.
Commentant la réponse de tous les autres et la promotion de votre propre n'est pas très utile ou orientée communautaire. S'il vous plaît s'abstenir de le faire à l'avenir.
Je ne connais pas le dialecte exact MS-Syntax-TableCt, mais je vais essayer de prouver que vous n'avez pas besoin d'une construction IF ou de cas. J'ai pris la réponse de @mellamokb comme exemple.
Sauf que votre " quête pour éviter un cas lorsque / else code>" donne dans un où la clause code> qui nécessite plusieurs évaluations à effectuer pour chaque enregistrement alors que mon document quand. .. code> peut être évalué une fois et n'a besoin que d'une seule évaluation par enregistrement.
L'idée ici est d'utiliser la règle de réécriture impliciteuse: dans votre cas p> est équivalent à p> et est lui-même équivalent à p> ré-écrire l'original est équivalent à (ce temps omettant l'étape intermédiaire) p> L'expression deux peut alors être enrichir sous forme normale conjonctive ("une série de ele code> clause sous forme de Si..then code> instruction dans son propre droit: p> et code> s) p>
Sélectionnez A.Name, si (a.is_active = 't', 'actif', "inactif") de MyTable A P>