Consulta SQL de DateTime simple


83

¿Cómo consulto el campo de la base de datos DateTime dentro de un rango determinado?

Estoy usando SQL SERVER 2005

Código de error a continuación

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

Tenga en cuenta que necesito obtener filas dentro de un cierto rango de tiempo. Ejemplo, intervalo de tiempo de 10 minutos.

Actualmente, SQL regresa con sintaxis incorrecta cerca de '12'. "


2
La respuesta de clyc es correcta: debe agregar comillas. Cometí este error antes, porque si lo hace, where date = 1/12/2011por ejemplo, parecerá que funciona, pero en realidad divida el 1/12/2011 y obtenga cero, y luego trate cero como el valor de fecha y hora mínimo posible.
John Gibb

Respuestas:


117

Te perdiste el signo de comillas simples:

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

Además, se recomienda utilizar el formato ISO8601 AAAA-MM-DDThh: mm: ss.nnn [Z], ya que este no dependerá de la cultura local de su servidor.

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

No funciona tan bien Msg 242, Nivel 16, Estado 3, Línea 1 La conversión de un tipo de datos char a un tipo de datos de fecha y hora dio como resultado un valor de fecha y hora fuera del rango.
ove

@overule - intente usar el segundo ejemplo
Alex Aza

@overule: también, asegúrese de que su columna tenga el tipo de fecha y hora.
Alex Aza

3
@Eric - aaaammdd no tiene tiempo.
Alex Aza

8

Necesita comillas alrededor de la cadena que está tratando de hacer pasar como una fecha, y también puede usar BETWEEN aquí:

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

Consulte la respuesta a la siguiente pregunta para ver ejemplos sobre cómo convertir explícitamente cadenas en fechas mientras se especifica el formato:

Conversión de la cadena del servidor SQL a la fecha


Mismo error que el anterior. Msg 242, nivel 16, estado 3, línea 1 La conversión de un tipo de datos char a un tipo de datos de fecha y hora dio como resultado un valor de fecha y hora fuera del rango. Estoy realmente confundido.
ove

oh, acabo de copiar tu fecha y hora, tienes 25/05 pero probablemente esté esperando el mes / fecha, así que cambia ambos. Edité mi respuesta y me vinculé a una buena pregunta aquí en SO que muestra cómo convertir cadenas a fechas explícitamente
Milimetric

6

Esto me ha funcionado tanto en SQL Server 2005 como en 2008:

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

5

Puede ejecutar el siguiente código

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

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

Si esto no funciona, por favor escriba su tabla y publíquela aquí. esto nos ayudará a darle la respuesta correcta rápidamente.


1
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

Otros ya han dicho que los literales de fecha en SQL Server requieren estar entre comillas simples, pero quería agregar que puede resolver su problema de confusión mes / día de dos maneras (es decir, el problema donde 25 se considera el mes y 5 el día):

  1. Utilice un explícito Convert(datetime, 'datevalue', style)where style es uno de los códigos de estilo numéricos, consulte Transmitir y convertir . El parámetro de estilo no solo sirve para convertir fechas en cadenas, sino también para determinar cómo se analizan las cadenas en fechas.

  2. Utilice un formato independiente de la región para las fechas almacenadas como cadenas. El uso que yo es 'hh aaaammdd: mm: ss', o considerar el formato ISO, yyyy-mm-ddThh:mi:ss.mmm. Según la experimentación, NO hay ninguna otra cadena de formato invariable en el idioma. (Aunque creo que puede incluir la zona horaria al final, consulte el enlace anterior).


0

Abra el archivo de acceso al que está intentando exportar datos SQL. Elimine las consultas que estén allí. Cada vez que ejecuta el asistente de importación de SQL Server, incluso si falla, crea una consulta en la base de datos de Access que debe eliminarse antes de poder ejecutar nuevamente el asistente de exportación de SQL.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.