Requête Sql avec plage de dates
Je suis en train de récupérer les enregistrements de la table à l'aide de la requête sql ci-dessous.
SELECT Code,Description FROM Table
WHERE ID= 1 AND FromDate >= '2010-02-14' AND ToDate <= '2012-03-14'
Même si les enregistrements existe pour cette date, la requête ne retourne rien.
ID HID HCode HDescription FromDate ToDate
-------------------------------------------------------------------
1 3 H8 New Year 2012-03-14 12:38:00 2012-03-14 12:38:00
Merci de me donner une solution adaptée. Merci pour votre temps !!
- Vous pouvez poster votre table design?
- Pouvez-vous nous montrer le
FromDate
etToDate
de l'enregistrement avecID=1
? - Pour être indépendant de tout langage, régional ou le format de date les paramètres, vous devez utiliser la norme ISO-8601 lors de la spécification des dates -
YYYYMMDD
(n tirets!). Aussi: si celles-ci sontDATETIME
oclumns (vous n'avez pas clairement dire), puis<= '20120314'
trouverez de quoi avant le 14 Mars - mais si pas lire toutes les entrées pour le 14 Mars (avec un temps de partie > 00:00:00) .... - les deux AAAA-MM-JJ ou AAAAMMJJ sont ISO8601. en.wikipedia.org/wiki/ISO_8601
YYYY-MM-DD
est sans danger pourdate
mais pas pourdatetime
. Jetez un oeil ici.- yep. la réponse de la mine a été en ce qui concerne : "ces deux formats sont en 8601".
- Quelque chose que j'ai trouvé, c'est quand vous voulez travailler avec des dates comme une valeur de chaîne, utilisez la date, le format, comme
dd MMM yyyy
par exemple, 19 mars 2012 - NON, ILS ne SONT PAS - essayez ceci:
set language british; select CAST('2012-03-31' AS DATETIME)
et vous recevrez un message d'erreur:Msg 242, Level 16, State 3, Line 3 The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.
- votre lien d'un article parle de MySql et Sql Srver...
- Vous avez mal lu (que je n'ai presque). Il me dit que Mon Serveur SQL Wishlist, c'est pas Mon SQL Server liste de Souhaits.
- Pls trouver l'entrée d'enregistrement ci-dessous ID HID HCode HDescription FromDate Jour 1 3 H8 Nouvelle Année 2012-03-14 12:38:00 2012-03-14 12:38:00
- Tableau Design ID int HID int HCode de type nvarchar(15) HDescription de type nvarchar(50) HFrom smalldatetime HTo smalldatetime
- hhhh vous droit... 🙂
- oui, le long de l'ISO-8601 (date et l'heure de portions). Il y a aussi le court (date uniquement) format - mais pour que cela fonctionne fiable peu importe la langue que les paramètres de votre Serveur SQL server, vous devez utiliser
YYYYMMDD
SANS, les tirets. Je sais que cela va à l'encontre de ce que dit Wikipedia à propos de l'ISO-8601 - mais c'est le la RÉALITÉ de SQL Server en tant qu'elle existe aujourd'hui. Habituez à elle. - le
T
est ce qui fait que le coffre-fort. Supprimer laT
et ce sera un échec. - Je ne suis pas d'argumenter avec vous. Im juste dire que votre exemple ne sont pas exactes et jouissaient de
set language
. Aussi - s'il vous plaît notez que Le chemin COURT est de l'ISO et de ne pas ISO8601 comme vous l'avez indiqué. et pour vous rappeler que nous avons parlé de ISO8601 et pas ISO. i.stack.imgur.com/9muVt.jpg ... - MSDN explicitement dire que vous devriez écrire CHAQUE ÉLÉMENT. Alors, pourquoi vous voulez supprimer la T ?
- Je n'ai pas suggéré que vous devriez les enlever. J'ai dit que SI vous l'enlever, vous avez de la difficulté avec certains paramètres régionaux. Il y a deux façons de faire un littéral de chaîne de sécurité pour la conversion implicite de
datetime
.YYYYMMDD HH:MM:SS
ouYYYY-MM-DDTHH:MM:SS
. Lorsque vous ne souhaitez pas spécifier le temps de la partie, vous devez utiliserYYYYMMDD
. - cochez cette page - MSDN SQL Server 2008 R2 docs sur DATETIME - lorsque vous faites défiler vers le milieu de la page, c'listes en vigueur "ISO-8601" formats - et les deux
YYYYMMDD
ainsi queYYYY-MM-DDTHH:MM:SS
sont répertoriés ..... - Merci. Je pensais : Que faire si je veux le format ISO, mais avec le TEMPS ? est-il correct ? ( il fonctionne) mais est-ce la bonne version ? sélectionnez
CAST('201203 13:13:13' AS DATETIME)
- Merci je vais le lire .
Vous devez vous connecter pour publier un commentaire.
essayez ceci :
p.s :
DateAdd(day, DateDiff(day, 0, @dayAfter ), 0)
de réinitialiser le temps de00:00
si vous avez besoin
desired EndTime < begining of the day after
Essayer avec la requête suivante,il va certainement résoudre votre problème....
Si vous sélectionnez des données entre FromDate et à Jour, puis supprimer l'ID=1.
Comme dans ce cas est de l'enregistrement sélectionné avec l'ID = 1 et FromDate et Jour coché cette entrée.
De la sélection des données à partir de ragne
Vous devez faire comme ceci: