Forums Últimos mensajes - Powered by IBM
 

Uso del Convert y/o Cast

18/06/2008 - 19:22 por Duvan | Informe spam
Hola a todos tengo un problema para convertir unas fechas, alguno de ustedes
me podria ayudar, el caso es el siguiente:

no me unciona la busqueda aqui:
2003-09-30 00:00:00.000 campo con nombre fecha
para este utlizo la sentencia SELECT * FROM BTOEXCCANTODOS WHERE convert
(varchar,FECHA, 111 ) = convert(varchar,getdate(),111)


y el otro 2003-03-29 10:10:25.000 campo con nombre oadatime
SELECT * FROM OPTAUDIT WHERE convert (varchar,OADATETIME, 111 ) =
convert(varchar,getdate(),111)



y aqui funciona la busqueda

He intendado con el cast pero no ha sido posible.

Gracias por su colaboracion
 

Leer las respuestas

#1 Alejandro Mesa
18/06/2008 - 23:37 | Informe spam
Duvan,

Si manipulas la columna, como lo estas haciendo ahora en la clausula
"where", entonces obligas a sql server a hacer un rastreo (scan) de el indice
o la tabla, sin darle opcion a que pueda hacer una busqueda rapida (seek).

Si tu consulta trata de buscar todas las filas cuya fecha es igual a la
fecha corriente, sin importar el tiempo, entonces debes usar el patron:

...
where
columna_fecha >= dateadd(day, datediff(day, 0, getdate()), 0)
and columna_fecha < dateadd(day, datediff(day, 0, getdate()) + 1, 0)

En palabras, si la columna tipo datetime es mayor o igual que hoy a las
00:00:00.000 y menor a mañana a las 00:00:00.000

Asi que la consulta quedaria:

SELECT *
FROM BTOEXCCANTODOS
WHERE
FECHA >= DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0)
AND FECHA < DATEADD(day, DATEDIFF(day, 0, GETDATE()) + 1, 0)
GO


AMB


"Duvan" wrote:

Hola a todos tengo un problema para convertir unas fechas, alguno de ustedes
me podria ayudar, el caso es el siguiente:

no me unciona la busqueda aqui:
2003-09-30 00:00:00.000 campo con nombre fecha
para este utlizo la sentencia SELECT * FROM BTOEXCCANTODOS WHERE convert
(varchar,FECHA, 111 ) = convert(varchar,getdate(),111)


y el otro 2003-03-29 10:10:25.000 campo con nombre oadatime
SELECT * FROM OPTAUDIT WHERE convert (varchar,OADATETIME, 111 ) =
convert(varchar,getdate(),111)



y aqui funciona la busqueda

He intendado con el cast pero no ha sido posible.

Gracias por su colaboracion

Preguntas similares