web-dev-qa-db-fra.com

Requête SQL DateTime simple

Comment interroger le champ de base de données DateTime dans une certaine plage?

J'utilise SQL SERVER 2005

Code d'erreur ci-dessous

SELECT * 
  FROM TABLENAME 
 WHERE DateTime >= 12/04/2011 12:00:00 AM 
   AND DateTime <= 25/05/2011 3:53:04 AM

Notez que je dois obtenir des lignes dans une certaine plage de temps. Exemple, intervalle de temps de 10 minutes.

Actuellement, SQL retourne avec une syntaxe incorrecte près de '12'. "

78
ove

Vous avez manqué le signe guillemet simple:

SELECT * 
FROM TABLENAME 
WHERE DateTime >= '12/04/2011 12:00:00 AM' AND DateTime <= '25/05/2011 3:53:04 AM'

Il est également recommandé d'utiliser le format ISO8601 AAAA-MM-JJThh: mm: ss.nnn [Z], car celui-ci ne dépend pas de la culture locale de votre serveur.

SELECT *
FROM TABLENAME 
WHERE 
    DateTime >= '2011-04-12T00:00:00.000' AND 
    DateTime <= '2011-05-25T03:53:04.000'
106
Alex Aza

Vous avez besoin de guillemets autour de la chaîne que vous essayez de transmettre comme date et vous pouvez également utiliser BETWEEN ici:

 SELECT *
   FROM TABLENAME
  WHERE DateTime BETWEEN '04/12/2011 12:00:00 AM' AND '05/25/2011 3:53:04 AM'

Voir la réponse à la question suivante pour des exemples sur la conversion explicite de chaînes en dates tout en spécifiant le format:

Conversion de chaîne Sql Server en date

8
Milimetric

Cela a fonctionné pour moi dans SQL Server 2005 et 2008:

SELECT * from TABLE
WHERE FIELDNAME > {ts '2013-02-01 15:00:00.001'}
  AND FIELDNAME < {ts '2013-08-05 00:00:00.000'}
6
Jamaria

Vous pouvez exécuter le code ci-dessous

SELECT Time FROM [TableName] where DATEPART(YYYY,[Time])='2018' and DATEPART(MM,[Time])='06' and DATEPART(DD,[Time])='14
3
Abdul Rafey

Ouvrez le fichier d’accès vers lequel vous essayez d’exporter des données SQL. Supprimer toutes les requêtes qui sont là. Chaque fois que vous exécutez l'assistant d'importation SQL Server, même en cas d'échec, il crée une requête dans la base de données Access qui doit être supprimée avant de pouvoir réexécuter l'exportation SQL Wizard.

1
Dan
SELECT * 
  FROM TABLENAME 
 WHERE [DateTime] >= '2011-04-12 12:00:00 AM'
   AND [DateTime] <= '2011-05-25 3:35:04 AM'

Si cela ne fonctionne pas, veuillez écrire votre tableau et le poster ici. cela nous aidera à vous donner la bonne réponse rapidement.

1
clyc
select getdate()

O/P
----
2011-05-25 17:29:44.763

select convert(varchar(30),getdate(),131) >= '12/04/2011 12:00:00 AM'

O/P
---
22/06/1432  5:29:44:763PM
1
jack.mike.info

D’autres ont déjà dit que les littéraux de date dans SQL Server exigent d’être entourés de guillemets simples, mais j’aimerais ajouter que vous pouvez résoudre votre problème de confusion mois/jour de deux manières (c’est-à-dire que le problème où 25 est considéré comme le mois et 5 le journée) :

  1. Utilisez un Convert(datetime, 'datevalue', style) explicite où style est l'un des codes de style numériques, voir Conversion et conversion . Le paramètre de style ne sert pas uniquement à convertir les dates en chaînes, mais également à déterminer comment les chaînes sont analysées en fonction des dates.

  2. Utilisez un format indépendant de la région pour les dates stockées sous forme de chaînes. Celui que j'utilise est 'aaaammjjh hh: mm: ss', ou considère le format ISO, yyyy-mm-ddThh:mi:ss.mmm. Basé sur l'expérimentation, il n'y a AUCUNE autre chaîne de format invariant par la langue. (Bien que je pense que vous pouvez inclure le fuseau horaire à la fin, voir le lien ci-dessus).

1
ErikE