2010-11-15 26 views
8

Me gustaría recuperar los registros en ciertas fechas después de d/mm/yyyy, o después de d/mm/yyyy y antes de d/mm/yyyy, ¿cómo puedo hacerlo?Seleccionar consulta con la condición de fecha

SELECT date 
FROM table 
WHERE date > 1/09/2008; 

y

SELECT date 
FROM table 
WHERE date > 1/09/2008; 
AND date < 1/09/2010 

No funciona.

Respuesta

21

Tenga cuidado, sin querer se pregunta "dónde la fecha es mayor que una dividida entre nueve, dividida entre dos mil ocho".

Deja # signos alrededor de la fecha, como este #1/09/2008#

+0

bien ahora su trabajo, gracias –

+0

agradable ver a la gente una vez más poner -1 en la respuesta correcta, y sin añadir un comentario para explicar por qué – smirkingman

+1

-1. Esta forma de hacerlo depende de que el formato de fecha predeterminado sea dd/mm/aaaa. La otra respuesta usa el formato de fecha ISO. El OP sí preguntó "¿cómo lo hago?" No solo "¿por qué mi SQL devuelve la respuesta incorrecta?" – Colin

8

El punto y coma se utiliza para terminar la instrucción SQL.

Puede usar signos # alrededor de un valor de fecha o usar el acceso (ACE, Jet, lo que sea) emitido a DATETIME función CDATE(). Como su nombre lo indica, DATETIME siempre incluye un elemento de tiempo, por lo que sus valores literales deberían reflejar este hecho. El motor de SQL entiende perfectamente el formato de fecha ISO.

mejor no utilizar BETWEEN para DATETIME de acceso: se basa en utilizar un tipo de coma flotante y de todos modos el tiempo es un continuo;)

DATE y TABLE palabras reservadas en las normas SQL, ODBC y Jet 4.0 (y probablemente más allá), por lo que es mejor evitar los nombres de elementos de datos:

Sus predicados sugieren una representación abierta abierta de períodos (donde ni su fecha de inicio ni la fecha final se incluyen en el período), que es posiblemente la opción menos popular . Esto me hace preguntarme si nos referimos a utilizar la representación cerrada-abierta (donde se incluye ni su fecha de inicio, pero el plazo finalizará inmediatamente anterior a la fecha de finalización):

SELECT my_date 
    FROM MyTable 
WHERE my_date >= #2008-09-01 00:00:00# 
     AND my_date < #2010-09-01 00:00:00#; 

alternativa:

SELECT my_date 
    FROM MyTable 
WHERE my_date >= CDate('2008-09-01 00:00:00') 
     AND my_date < CDate('2010-09-01 00:00:00'); 
+0

No entiendo por qué recomendaría ENTRE ENTRE con las fechas. Sí, debe reconocer que sus resultados pueden no ser los esperados si no tiene en cuenta el componente de tiempo, pero eso no es un error con BETWEEN, sino un error de piloto simple por no entender el almacenamiento de sus datos. –

+0

@ David-W-Fenton: la naturaleza de punto flotante del almacenamiento (del cual este piloto es plenamente consciente) significa que la única forma de usar 'BETWEEN' con Access (ACE, Jet, lo que sea) es redondear siempre los valores a su nivel de precisión deseado (un día, un segundo, etc. pero la precisión de segundo es complicada ...) pero los usuarios están usando 'NOW()' en sus consultas, por lo que debe revocar los privilegios de las tablas base y exponer los requisitos funcionalidad que usa procs almacenados con parámetros 'DATETIME' que puede redondear ... todo llega a ser demasiado esfuerzo. – onedaywhen

+0

@ David-W-Fenton: "Sí, debe reconocer que sus resultados pueden no ser los esperados": todas las aplicaciones que soporto requieren que todos los resultados sean los esperados. ¿No es tuyo ...? – onedaywhen

1
select Qty, vajan, Rate,Amt,nhamali,ncommission,ntolai from SalesDtl,SalesMSt where SalesDtl.PurEntryNo=1 and SalesMST.SaleDate= (22/03/2014) and SalesMST.SaleNo= SalesDtl.SaleNo; 

Eso debería funcionar.

+4

hmmm ... la edición cambió el comentario debajo del código de "no funciona" a "trabajo" - todo lo contrario, ¿no? Entonces, ¿cuál era tu intención, respuesta (como ahora) o pregunta (como antes de la edición)? – kleopatra

-1

Hola chicos, creo que lo que estás buscando es este usando el comando Seleccionar. Con esto se puede especificar un rango mayor que (>) o menor que (<) en MySQL CON ESTE :::::

select* from <**TABLE NAME**> where year(**COLUMN NAME**) > **DATE** OR YEAR(COLUMN NAME)< **DATE**; 

POR EJEMPLO:

select name, BIRTH from pet1 where year(birth)> 1996 OR YEAR(BIRTH)< 1989; 
+----------+------------+ 
| name  | BIRTH  | 
+----------+------------+ 
| bowser | 1979-09-11 | 
| chirpy | 1998-09-11 | 
| whistler | 1999-09-09 | 
+----------+------------+ 

para la gama SIMPLE USO COMO SOLO MAYOR a/menor que

mysql> seleccione NOMBRE dE COLUMNA de < NOMBRE TABLA> donde año (COLUMN NAME)> 1996;

POR EJEMPLO mysql>

select name from pet1 where year(birth)> 1996 OR YEAR(BIRTH)< 1989; 
+----------+ 
| name  | 
+----------+ 
| bowser | 
| chirpy | 
| whistler | 
+----------+ 
3 rows in set (0.00 sec) 
Cuestiones relacionadas