SQL (Teradata) Sélectionner les données
J'ai une questions liées à SQL (teradata, en particulier).
J'ai pour générer le rapport pour 1 jour.
Comment puis-je l'atteindre?
Par exemple, dans le ms access, je peux faire
WHERE DT>=#2011-01-01# and DT<=#2011-0101#
Qu'en gros, les gars? (SQL Server, pas de MS Access).
Je sais qu'il est possible d'utiliser
DT between '2011-09-01' and '2011-09-02'
Mais cette méthode n'est pas précise. Comment puis-je spécifier 1 jour à l'aide d'varié OÙ l'énoncé?
Je m'excuse, je n'ai pas les accès SQL et je ne peux pas le tester, donc je suis demander des conseils professionnels.
Vous devez vous connecter pour publier un commentaire.
BETWEEN
est portée compris, cela va faire:Et, oui, c'est précis 🙂
Maintenant, si votre
DT
est un champ datetime (pas de champ de date), alors vous devez changer votre approche:De travail avec des dates dans Teradata peut être un peu délicat.
Si DT est un "timestamp" sur le terrain, vous pouvez simplement convertir une date et, parce que vous faites la déclaration exactement un jour, il suffit de tester pour l'égalité.
Disons que vous voulez rapport à aujourd'hui, donc passer dans "03/20/2012':
MS SQL est similaire:
Techniquement, je voudrais utiliser le paramétrage pour le passage de la date, mais vous obtenez l'idée.
Lors de la sélection d'une gamme (en particulier les dates et les horodatages), il est préférable de faire limite inférieure inclusive, la limite supérieure exclusif. Qui est, vous voulez que les choses dans la gamme
lb <= x < ub
. Dans votre cas, cela revient à:(le
:variableName
est ainsi que je suis entrée hôte variables sur mon système. Vous aurez à chercher jusqu'à ce qu'il est sur teradata.)Les chaînes que vous avez listés pour votre entre fonctionnera - je pense que presque tous les principaux SGBDR reconnaît *ISO mise en forme par défaut.
true
oufalse
(... je suis ignorant la valeur null pour cela, merci beaucoup).:startDate
devrait être'2011-09-01'
et:endDate
devrait être'2011-09-02'
, qui permettrait de sélectionner tous les moments de la journée de2011-09-01
. Tenter de faire de la limite supérieure inclusive pour l'horodatage est un meurtre, parce que vous avez de coucher avec tout le bas de la microseconde/nanoseconde niveau - aller du début de la journée (généralement négligeable), ajouter un jour, et d'obtenir moins de cette valeur, il est beaucoup plus facile.Réponse Simple serait:
Si vous voulez être explicitement
Vous pouvez toujours lire Teradata Manuel 🙂
Teradata Manuel sur ENTRE
À la suite de leur manuel, x ENTRE y ET z == ((x >= y) ET (x <=z))