J'essaie :
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;
A.Date
ressemble : 2010-03-04 00:00:00.000
Cependant, cela ne fonctionne pas.
Quelqu'un peut-il fournir une référence pour expliquer pourquoi ?
J'essaie :
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= 2010-04-01;
A.Date
ressemble : 2010-03-04 00:00:00.000
Cependant, cela ne fonctionne pas.
Quelqu'un peut-il fournir une référence pour expliquer pourquoi ?
select *
from dbo.March2010 A
where A.Date >= Convert(datetime, '2010-04-01' )
Dans votre requête, 2010-4-01
est traité comme une expression mathématique, donc en substance il se lit
select *
from dbo.March2010 A
where A.Date >= 2005;
( 2010 minus 4 minus 1 is 2005
En le convertissant en un véritable datetime
et l'utilisation de guillemets simples permettra de résoudre ce problème).
Techniquement, l'analyseur syntaxique pourrait vous permettre de vous en tirer avec
select *
from dbo.March2010 A
where A.Date >= '2010-04-01'
il effectuera la conversion pour vous, mais à mon avis, c'est moins lisible que de convertir explicitement vers un fichier DateTime
pour le programmeur de maintenance qui viendra après vous.
Le convertisseur explicite n'est pas nécessaire. De plus, je recommande vivement d'utiliser AAAAMMJJ au lieu de AAA-MM-JJ. Pourquoi ? Eh bien, essayez votre code avec SET LANGUAGE FRENCH
. :-) Pour cette date, vous obtiendrez le 4 janvier au lieu du 1er avril. Pour d'autres dates, vous obtiendrez peut-être une erreur.
@Aaron Bertrant - Dans ma réponse, j'ai indiqué que la conversion n'était pas nécessaire, en commençant par "Techniquement, le pareser pourrait vous permettre de vous en sortir avec <l'échantillon de code final>. Je le trouve simplement plus lisible, car il est évident que c'est une date et une heure. Trop de systèmes de base de données stockent les valeurs de date dans un champ varchar, mais vous avez raison au sujet du format. Normalement, lorsque j'utilise la conversion, j'ajoute également le spécificateur de format, mais j'ai fait mon exemple à l'improviste.
@AaronBertrand, j'ai dû utiliser votre suggestion en conjonction avec la réponse ci-dessus : CONVERT(datetime, '20100401 10:01:01')
- passing 2010-04-01 fonctionne dans SQL Server Management Studio mais pas lors de l'envoi de la déclaration SQL via PHP/MSSQL.
Dans votre requête, vous n'avez pas utilisé de guillemets simples autour de la date. C'était le problème. Cependant, vous pouvez utiliser l'une des requêtes suivantes pour comparer la date
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= '2010-04-01';
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= CAST('2010-04-01' as Date);
SELECT *
FROM dbo.March2010 A
WHERE A.Date >= Convert(datetime, '2010-04-01' )
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
31 votes
Mettez des guillemets simples autour d'elle
4 votes
En plus des guillemets, je recommande de toujours utiliser un format sûr et sans ambiguïté pour les chaînes littérales de date uniquement. Le seul format auquel je fais confiance est YYYYMMDD. Voir mon commentaire à la réponse de David pour en connaître la raison...