SQL Server 2005:SQL Server entre deux champs DateHeure, ne fonctionne pas correctement
La vue suivante
SELECT CONVERT(VARCHAR(20), keyedtimestamp, 101) as KeyedDate
FROM TMSSTATFILE_STATS a
WHERE (CONVERT(VARCHAR(20), a.KeyedTimestamp, 101) BETWEEN '03/01/2011' And '03/31/2011')
ORDER BY KeyedDate
Les résultats sont donnés pour les dates clavetés 3/2/2011 à 3/31/2011.
Si je change la première date à 03/00/2011
SELECT CONVERT(VARCHAR(20), keyedtimestamp, 101) as KeyedDate
FROM TMSSTATFILE_STATS a
WHERE (CONVERT(VARCHAR(20), a.KeyedTimestamp, 101) BETWEEN '03/00/2011' And '03/31/2011')
ORDER BY KeyedDate
donne maintenant des données pour les dates 3/1/2011 à 3/31/2011
Le champ KeyedTimestamp est DateTime et il y a des moments associés à ces enregistrements. Tous les enregistrements pour le 31/03/2011 sont comptabilisés. Je sais que je peux le faire en fournissant le maximum de temps à la deuxième date entre les deux, donc je ne cherche pas une alternative, mais plutôt une compréhension de pourquoi il ignore les enregistrements du premier, même s'il incorpore ceux à partir du 31
presque comme si son contrôle pour 3/1/2011 23:59:59, j'espérais pouvoir éliminer ce genre de contrôle où je me soucie seulement de la date, pas le temps
* Et le pré-SQL Server 2008 yyyymmdd est le seul format de date sûr. * ... Sauf si vous utilisez 'Set DateFormat'. – Thomas
@Thomas: c'est pourquoi yyyymdd est sûr à utiliser: pas de dépendance sur Set DateFormat et il est indépendant de l'environnement. S'appuyant sur définir DateFormat ou définir la langue n'est pas sûr à mon humble avis. Que se passe-t-il s'il s'agit d'une application tierce qui doit s'exécuter sur les boîtes SQL du client? Avez-vous lu le dos et commenté avec marc_s dans mon lien? – gbn
DateFormat devrait toujours fonctionner. En fait, je crois que les pilotes ADO.NET envoient Set DateFormat. Ce problème remonte à plusieurs versions. Je me souviens d'avoir lu un article de Kalen Delaney le jour de SQL 7.0 sur le même sujet. Si vous écrivez la requête, l'utilisation de YYYYMMDD est la plus sûre, mais il existe souvent une couche d'abstraction entre vous et la requête. – Thomas