Question simple mais je n'arrive pas encore à la résoudre ...
J'ai une table TEST avec un champ DATETIME, comme ceci:
ID NAME DATE
1 TESTING 2014-03-19 20:05:20.000
Ce dont j'ai besoin, c'est que la requête ci-dessous retourne cette ligne et toutes les lignes avec date = 03/19/2014, quelle que soit l'heure:
select * from test where date = '03/19/2014';
Mais il ne retourne pas de lignes. La seule façon de travailler est de spécifier aussi l'heure:
select * from test where date = '03/19/2014 20:03:02.000';
Merci d'avance !
utiliser plage ou fonction DateDiff
select * from test
where date between '03/19/2014' and '03/19/2014 23:59:59'
ou
select * from test
where datediff(day, date, '03/19/2014') = 0
Les autres options sont:
Si vous avez le contrôle sur le schéma de base de données et que vous n'avez pas besoin des données de temps , Supprimez-les.
ou, si vous devez le conserver, ajoutez un attribut de colonne calculé dont la partie heure de la valeur de date est supprimée ...
Alter table Test
Add DateOnly As
DateAdd(day, datediff(day, 0, date), 0)
ou, dans des versions plus récentes de SQL Server ...
Alter table Test
Add DateOnly As
Cast(DateAdd(day, datediff(day, 0, date), 0) as Date)
alors, vous pouvez écrire votre requête simplement:
select * from test
where DateOnly = '03/19/2014'
Réponse simple;
select * from test where cast ([date] as date) = '03/19/2014';
J'utilise MySQL 5.6 et une fonction DATE permet d'extraire uniquement la partie date de date heure. Donc, la solution simple à la question est -
select * from test where DATE(date) = '2014-03-19';
http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html
select * from test
where date between '03/19/2014' and '03/19/2014 23:59:59'
C’est une réponse réelle mauvaise. Pour deux raisons.
1 . Que se passe-t-il avec des moments comme 23.59.59.700 etc . Il y a des moments plus grands que 23:59:59 et le lendemain.
2 . Le comportement dépend du type de données . La requête se comporte différemment pour les types date/heure/date/date/heure2.
Les tests effectués avec 23: 59: 59.999 aggravent encore les choses car, en fonction du type de données, vous obtenez des arrondis différents.
select convert (varchar(40),convert(date , '2014-03-19 23:59:59.999'))
select convert (varchar(40),convert(datetime , '2014-03-19 23:59:59.999'))
select convert (varchar(40),convert(datetime2 , '2014-03-19 23:59:59.999'))
- Pour la date, la valeur est 'hachée' .-- Pour la date et l'heure, la valeur est arrondie à la date suivante. (Valeur la plus proche) .-- Pour datetime2, la valeur est précise.
Essaye ça
select * from test where Convert(varchar, date,111)= '03/19/2014'
tu peux essayer ça
select * from test where DATEADD(dd, 0, DATEDIFF(dd, 0, date)) = '03/19/2014';
Cela fonctionne pour moi pour MS SQL Server:
select * from test
where
year(date) = 2015
and month(date) = 10
and day(date)= 28 ;
Vous pouvez utiliser cette approche qui tronque la partie temps:
select * from test
where convert(datetime,'03/19/2014',102) = DATEADD(dd, DATEDIFF(dd, 0, date), 0)
select *
from invoice
where TRUNC(created_date) <=TRUNC(to_date('04-MAR-18 15:00:00','dd-mon-yy hh24:mi:ss'));
-- Reverse the date format
-- this false:
select * from test where date = '28/10/2015'
-- this true:
select * from test where date = '2015/10/28'
Il y a un problème avec les dates et les langues et le moyen d'éviter cela consiste à demander des dates avec ce format AAAAMMJJ.
Ce chemin ci-dessous devrait être le plus rapide selon le lien ci-dessous. J'ai vérifié dans SQL Server 2012 et je suis d'accord avec le lien.
select * from test where date >= '20141903' AND date < DATEADD(DAY, 1, '20141903');
Testez cette requête.
SELECT *,DATE(chat_reg_date) AS is_date,TIME(chat_reg_time) AS is_time FROM chat WHERE chat_inbox_key='$chat_key'
ORDER BY is_date DESC, is_time DESC
Utilisez simplement ceci dans votre clause WHERE
.
La partie "SubmitDate" ci-dessous est le nom de la colonne, insérez donc votre propre
Cela renverra uniquement la partie "Année" des résultats, en omettant les minutes, etc.
Where datepart(year, SubmitDate) = '2017'
select *, cast ([col1] as date) <name of the column> from test where date = 'mm/dd/yyyy'
"col1" est le nom de la colonne avec la date et l'heure
<nom de la colonne> vous pouvez changer le nom comme vous le souhaitez