Sobre Fechas en SQL

30/01/2005 - 20:04 por Carlos Gómez | Informe spam
Si introduzco:
SELECT * FROM Articulos WHERE
(
((ArticuloFechaEntrada>/01/2004) AND (ArticuloFechaEntrada<1/01/2005))
AND (ArticuloHabilitado=True)
)
ORDER BY ArticuloMiReferencia ASC

me responde que no hay coincidentes

Esa misma consulta (copiar--pegar) en el editor sql de access me devuelve
resultados.

¿Hay algún error en la expresión sql que paso?
¿Las fechas se pasan de esa forma?

Ah, estoy usando OLEDB.

PD: Los saltos de linea los he introducido en el correo para que quede más
clara la consulta SQL.

Preguntas similare

Leer las respuestas

#1 Jorge Serrano [MVP VB]
30/01/2005 - 21:35 | Informe spam
Hola Carlos,

pon las fechas entre comillas simples, por ejemplo:
'01/01/2004'

De todas las maneras, no se con que tipo de datos trabajas, pero puedes
mirar también en la ayuda de SQL Server, y buscar CAST y CONVERT para
convertir expresiones en formato datetime en SQL Server y realizar búsquedas
mucho más óptimas.
http://msdn.microsoft.com/library/d...o_2f3o.asp

Espero que haya sido de tu ayuda.

Un saludo,

Jorge Serrano Pérez
MVP VB.NET




"Carlos Gómez" wrote:

Si introduzco:
SELECT * FROM Articulos WHERE
(
((ArticuloFechaEntrada>/01/2004) AND (ArticuloFechaEntrada<1/01/2005))
AND (ArticuloHabilitado=True)
)
ORDER BY ArticuloMiReferencia ASC

me responde que no hay coincidentes

Esa misma consulta (copiar--pegar) en el editor sql de access me devuelve
resultados.

¿Hay algún error en la expresión sql que paso?
¿Las fechas se pasan de esa forma?

Ah, estoy usando OLEDB.

PD: Los saltos de linea los he introducido en el correo para que quede más
clara la consulta SQL.



Respuesta Responder a este mensaje
#2 Carlos Sacristán
31/01/2005 - 13:43 | Informe spam
Si quieres evitarte dolores de cabeza con las fechas, usa el formato
ANSI (yyyymmdd o yyyymmdd hh:mn:ss)


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

"Carlos Gómez" escribió en el mensaje
news:
Si introduzco:
SELECT * FROM Articulos WHERE
(
((ArticuloFechaEntrada>/01/2004) AND


(ArticuloFechaEntrada<1/01/2005))
AND (ArticuloHabilitado=True)
)
ORDER BY ArticuloMiReferencia ASC

me responde que no hay coincidentes

Esa misma consulta (copiar--pegar) en el editor sql de access me devuelve
resultados.

¿Hay algún error en la expresión sql que paso?
¿Las fechas se pasan de esa forma?

Ah, estoy usando OLEDB.

PD: Los saltos de linea los he introducido en el correo para que quede más
clara la consulta SQL.


Respuesta Responder a este mensaje
#3 Carlos Gómez
31/01/2005 - 16:43 | Informe spam
Si lo pongo entre comillas simples ( ' ) o comillas dobles ( " )

Me devuelve el siguiente error:

No coinciden los tipos de datos en la expresion de criterios

Si pongo:

"SELECT COUNT(*) FROM Articulos WHERE
(
(
(
ArticuloFechaEntrada>ÊST(01/01/2004 AS DATETIME)
)
AND
(
ArticuloFechaEntrada<ÊST(31/01/2005 AS DATETIME)
)
)
AND (ArticuloHabilitado=True)
)"

Error:

Error de IErrorInfo.GetDescription con E_FAIL(0x80004005).

Si pongo la fecha entre comillas simples o dobles usando CAST:

Error: No coinciden los tipos de datos en la expresion de criterios.

La base de datos es ACCESS 2002 con SP3.

La cadena de conexion es:

Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database Password=administrador;
Data Source=C:\Datos.mdb;Persist Security Info=True
Respuesta Responder a este mensaje
#4 Leonardo Azpurua
31/01/2005 - 18:39 | Informe spam
"Carlos Gómez" escribió en el mensaje
news:
Si lo pongo entre comillas simples ( ' ) o comillas dobles ( " )
Me devuelve el siguiente error:
No coinciden los tipos de datos en la expresion de criterios
Si pongo:
"SELECT COUNT(*) FROM Articulos WHERE
(
(
(
ArticuloFechaEntrada>ÊST(01/01/2004 AS DATETIME)
)
AND
(
ArticuloFechaEntrada<ÊST(31/01/2005 AS DATETIME)
)
)
AND (ArticuloHabilitado=True)
)"

Error:

Error de IErrorInfo.GetDescription con E_FAIL(0x80004005).



Hola, Carlos Gomez:

Las fechas en Access siguen empleando el formato #yyyy-mm-dd#.

Estas dos líneas funcionan correctamente:

.CommandText = "SELECT * FROM Facturas WHERE FechaTransaccion BETWEEN
#2005-01-01# AND #2005-01-31#"
.CommandType = CommandType.Text

o sea que tu consulta quedaría así:

SELECT COUNT(*) FROM Articulos WHERE ArticuloFechaEntrada>=#2004-01-01# AND
ArticuloFechaEntrada<= #2005-01-31# AND ArticuloHabilitado=True

o, lo que es lo mismo pero mas claro:

SELECT COUNT(*) FROM Articulos WHERE ArticuloFechaEntrada BETWEEN
#2004-01-01# AND #2005-01-31# AND ArticuloHabilitado=True

Salud!
Respuesta Responder a este mensaje
#5 Carlos Gómez
31/01/2005 - 19:12 | Informe spam
Gracias a Leonardo Azpurua

Las fechas en Access siguen empleando el formato #yyyy-MM-dd#.

y para realizar la consulta el valor de la fecha lo meto así:

dim fecha as date
fecha=#31/01/2005#

sql &= string.format({0:#yyyy-MM-dd#}",fecha)
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida