Problemas con consulta

24/05/2005 - 10:51 por blackpower | Informe spam
Buenos dias,

Tengo una consulta que me devuelve:

Tienda HoraInicio HoraFin
Prica 10:20 14:10
Caprabo 11:20
Esquina 11:10 18:29
Fitó as 13:45

El problema es que quien diseñó la BD creó esos campos de hora en un
varchar!

Ahora tengo que hacer una consulta que me devuelva las tiendas que en el
momento de hacer las consultas esté abierta... He pensado en:

SELECT
horaInicio,
nombreTienda

FROM tiendas
WHERE isdate(horaInicio)=1
AND cast(horaInicio as datetime)>=getdate()

Esta consulta "peta" por el cast: Error de sintaxis al convertir una cadena
de caracteres a datetime.


Existe alguna forma de sacar esta consulta?


Gracias de antemano y saludos,

Xus.

Preguntas similare

Leer las respuestas

#1 Maxi
24/05/2005 - 14:19 | Informe spam
Hola, seguro que fracasa porque hay valores no validos pero no por el Cast


Salu2
Maxi


"blackpower" escribió en el mensaje
news:%
Buenos dias,

Tengo una consulta que me devuelve:

Tienda HoraInicio HoraFin
Prica 10:20 14:10
Caprabo 11:20
Esquina 11:10 18:29
Fitó as 13:45

El problema es que quien diseñó la BD creó esos campos de hora en un
varchar!

Ahora tengo que hacer una consulta que me devuelva las tiendas que en el
momento de hacer las consultas esté abierta... He pensado en:

SELECT
horaInicio,
nombreTienda

FROM tiendas
WHERE isdate(horaInicio)=1
AND cast(horaInicio as datetime)>=getdate()

Esta consulta "peta" por el cast: Error de sintaxis al convertir una
cadena
de caracteres a datetime.


Existe alguna forma de sacar esta consulta?


Gracias de antemano y saludos,

Xus.



Respuesta Responder a este mensaje
#2 blackpower
24/05/2005 - 16:00 | Informe spam
bueno, en eso estamos de acuerdo... pero lo que pregunto es si álguien sabe
alguna forma de sacar los resultados gracias.

xus.


"Maxi" escribió en el mensaje
news:eQHh$
Hola, seguro que fracasa porque hay valores no validos pero no por el Cast


Salu2
Maxi


"blackpower" escribió en el mensaje
news:%
Buenos dias,

Tengo una consulta que me devuelve:

Tienda HoraInicio HoraFin
Prica 10:20 14:10
Caprabo 11:20
Esquina 11:10 18:29
Fitó as 13:45

El problema es que quien diseñó la BD creó esos campos de hora en un
varchar!

Ahora tengo que hacer una consulta que me devuelva las tiendas que en el
momento de hacer las consultas esté abierta... He pensado en:

SELECT
horaInicio,
nombreTienda

FROM tiendas
WHERE isdate(horaInicio)=1
AND cast(horaInicio as datetime)>=getdate()

Esta consulta "peta" por el cast: Error de sintaxis al convertir una
cadena
de caracteres a datetime.


Existe alguna forma de sacar esta consulta?


Gracias de antemano y saludos,

Xus.







Respuesta Responder a este mensaje
#3 Eleazar
24/05/2005 - 16:27 | Informe spam
pues lo ideal es que esos campos sean de tipo fecha
el error es obvio porque la cadena que quieres convertir esta incompleta un
tipo fecha se compone por varios datos.
sugiero que compongas la condicion algo asi :
DateAdd(hh,left(horaInicio,2),(DateAdd(mi,right(horaInicio,2),Convert(varcha
r(12),getdate(),112))))
= getdate()



"blackpower" escribió en el mensaje
news:%
Buenos dias,

Tengo una consulta que me devuelve:

Tienda HoraInicio HoraFin
Prica 10:20 14:10
Caprabo 11:20
Esquina 11:10 18:29
Fitó as 13:45

El problema es que quien diseñó la BD creó esos campos de hora en un
varchar!

Ahora tengo que hacer una consulta que me devuelva las tiendas que en el
momento de hacer las consultas esté abierta... He pensado en:

SELECT
horaInicio,
nombreTienda

FROM tiendas
WHERE isdate(horaInicio)=1
AND cast(horaInicio as datetime)>=getdate()

Esta consulta "peta" por el cast: Error de sintaxis al convertir una


cadena
de caracteres a datetime.


Existe alguna forma de sacar esta consulta?


Gracias de antemano y saludos,

Xus.



Respuesta Responder a este mensaje
#4 Alejandro Mesa
24/05/2005 - 17:06 | Informe spam
Lo que debemos de asegurarnos es de seleccionar las filas donde estos campos
tengan el formato hh:mm y usar la parte de la fecha de la misma funcion
getdate().

Ejemplo:

use northwind
go

create table t1 (
Tienda varchar(25),
HoraInicio char(5),
HoraFin char(5)
)
go

insert into t1 values('Prica', '10:20', '14:10')
insert into t1 values('Caprabo', null, '11:20')
insert into t1 values('Esquina', '11:10', '18:29')
insert into t1 values('Fitó', 'as', '13:45')
go

select
Tienda, HoraInicio, HoraFin
from
t1
where
getdate() between
case
when HoraInicio like '[0-9][0-9]:[0-9][0-9]' then convert(char(10),
getdate(), 126)
else null
end + 'T' + HoraInicio + ':00'
and
case
when coalesce(HoraFin, right(convert(char(16), getdate(), 126), 5)) like
'[0-9][0-9]:[0-9][0-9]' then convert(char(10), getdate(), 126)
else null
end + 'T' + coalesce(HoraFin + ':' + right('0' + ltrim(datepart(second,
getdate())), 2), right(convert(char(19), getdate(), 126), 8))
go

drop table t1
go

Si la HoraInicio tiene formato 'hh:mm' entonces arma la fecha de inicio como
la parte de la fecha de la funcion getdate() , la cual seria "2005-05-24", y
adicionale 'T', HoraInicio y ':00' segundos. Si HoraFin (en caso de que
HoraFin sea null, entonces usamos la hora y los minutos de la funcion
getdate()) tiene formato 'hh:mm' entonces armamos la fecha final como la
parte de la fecha de la funcion getdate() , la cual seria "2005-05-24", y le
adicionamos 'T', HoraFin (en caso de que HoraFin sea null, entonces usamos la
hora, los minutos y los segundos de la funcion getdate()) mas los segundos de
la funcion getdate().

Un trabalenguas verdad?, eso es lo que pasa cuando no usamos el tipo de
datos correcto para almacenar data en nuestra bd.


AMB

"blackpower" wrote:

Buenos dias,

Tengo una consulta que me devuelve:

Tienda HoraInicio HoraFin
Prica 10:20 14:10
Caprabo 11:20
Esquina 11:10 18:29
Fitó as 13:45

El problema es que quien diseñó la BD creó esos campos de hora en un
varchar!

Ahora tengo que hacer una consulta que me devuelva las tiendas que en el
momento de hacer las consultas esté abierta... He pensado en:

SELECT
horaInicio,
nombreTienda

FROM tiendas
WHERE isdate(horaInicio)=1
AND cast(horaInicio as datetime)>=getdate()

Esta consulta "peta" por el cast: Error de sintaxis al convertir una cadena
de caracteres a datetime.


Existe alguna forma de sacar esta consulta?


Gracias de antemano y saludos,

Xus.




Respuesta Responder a este mensaje
#5 Maxi
24/05/2005 - 17:26 | Informe spam
jaja, y ni hablar de la performance no ;)


Salu2
Maxi


"Alejandro Mesa" escribió en el
mensaje news:
Lo que debemos de asegurarnos es de seleccionar las filas donde estos
campos
tengan el formato hh:mm y usar la parte de la fecha de la misma funcion
getdate().

Ejemplo:

use northwind
go

create table t1 (
Tienda varchar(25),
HoraInicio char(5),
HoraFin char(5)
)
go

insert into t1 values('Prica', '10:20', '14:10')
insert into t1 values('Caprabo', null, '11:20')
insert into t1 values('Esquina', '11:10', '18:29')
insert into t1 values('Fitó', 'as', '13:45')
go

select
Tienda, HoraInicio, HoraFin
from
t1
where
getdate() between
case
when HoraInicio like '[0-9][0-9]:[0-9][0-9]' then convert(char(10),
getdate(), 126)
else null
end + 'T' + HoraInicio + ':00'
and
case
when coalesce(HoraFin, right(convert(char(16), getdate(), 126), 5)) like
'[0-9][0-9]:[0-9][0-9]' then convert(char(10), getdate(), 126)
else null
end + 'T' + coalesce(HoraFin + ':' + right('0' + ltrim(datepart(second,
getdate())), 2), right(convert(char(19), getdate(), 126), 8))
go

drop table t1
go

Si la HoraInicio tiene formato 'hh:mm' entonces arma la fecha de inicio
como
la parte de la fecha de la funcion getdate() , la cual seria "2005-05-24",
y
adicionale 'T', HoraInicio y ':00' segundos. Si HoraFin (en caso de que
HoraFin sea null, entonces usamos la hora y los minutos de la funcion
getdate()) tiene formato 'hh:mm' entonces armamos la fecha final como la
parte de la fecha de la funcion getdate() , la cual seria "2005-05-24", y
le
adicionamos 'T', HoraFin (en caso de que HoraFin sea null, entonces usamos
la
hora, los minutos y los segundos de la funcion getdate()) mas los segundos
de
la funcion getdate().

Un trabalenguas verdad?, eso es lo que pasa cuando no usamos el tipo de
datos correcto para almacenar data en nuestra bd.


AMB

"blackpower" wrote:

Buenos dias,

Tengo una consulta que me devuelve:

Tienda HoraInicio HoraFin
Prica 10:20 14:10
Caprabo 11:20
Esquina 11:10 18:29
Fitó as 13:45

El problema es que quien diseñó la BD creó esos campos de hora en un
varchar!

Ahora tengo que hacer una consulta que me devuelva las tiendas que en el
momento de hacer las consultas esté abierta... He pensado en:

SELECT
horaInicio,
nombreTienda

FROM tiendas
WHERE isdate(horaInicio)=1
AND cast(horaInicio as datetime)>=getdate()

Esta consulta "peta" por el cast: Error de sintaxis al convertir una
cadena
de caracteres a datetime.


Existe alguna forma de sacar esta consulta?


Gracias de antemano y saludos,

Xus.




Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida