Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   obtener solo la fecha en formato fecha y sin hora (https://www.clubdelphi.com/foros/showthread.php?t=56160)

BlueSteel 08-05-2008 22:26:16

obtener solo la fecha en formato fecha y sin hora
 
Bueno, creo que el titulo no es muy explicativo, pero eso es lo que necesito...

Bueno, tengo una consulta en SQL (Server 2000), en donde en una tabla realizo un filtro y necesito realizar una consulta..

por ejemplo, si realizo esta consulta
Código SQL [-]
 
select Ord_Numero, Ord_Fecha
from Orden
Where Ord_Fecha Between '29/04/2008' And '08/05/2008'

me entrega estos resultados
Código:

17 2008-04-29 19:30:56.000
18 2008-05-06 19:30:56.000

tambien realice esta opción...
Código SQL [-]
select Ord_Numero, Ord_Fecha, Convert(varchar(10), Ord_Fecha, 103) As Fecha
from Orden
Where Ord_Fecha Between '29/04/2008' And '08/05/2008'

me entrega esto
Código:

17        2008-04-29 19:30:56.000        29/04/2008
18        2008-05-06 19:30:56.000        06/05/2008

pero necesito que me entrege el último dato (fecha) pero en formato de fecha, ya que cuando realizo la consulta desde delphi, si bien funciona, no me entrega los resultados esperados...

la idea es que en esta sentencia
Código SQL [-]
Convert(varchar(10), Ord_Fecha, 108) As Fecha
en vez de devolver el valor en varchar,.. me lo devuelva en formato de fecha...

la sentencia desde delphi la estoy realizando así

Código Delphi [-]
             Datos.AQ_VOrden.SQL.Clear;
             Datos.AQ_VOrden.SQL.Add('Select Ord_Numero, Ord_Fecha');
             Datos.AQ_VOrden.SQL.Add('From Orden_Proveedor');
             Datos.AQ_VOrden.SQL.Add('Where Ord_Fecha Between :Var1 And :Var2');
             Datos.AQ_VOrden.SQL.Add('Order By Ord_Numero');
             Datos.AQ_VOrden.Parameters[0].Value := vDes.Date;
             Datos.AQ_VOrden.Parameters[1].Value := vHas.Date;
             Datos.AQ_VOrden.Open;

si bie, me devuelve los resultados, el campo fecha me lo muestra con la hora.. y solo quiero la fecha...

Código Delphi [-]
             Datos.AQ_VOrden.SQL.Clear;
             Datos.AQ_VOrden.SQL.Add('Select Ord_Numero, Convert(varchar(10), Ord_Fecha, 103) As Fecha');
             Datos.AQ_VOrden.SQL.Add('From Orden_Proveedor');
             Datos.AQ_VOrden.SQL.Add('Where Ord_Fecha Between :Var1 And :Var2');
             Datos.AQ_VOrden.SQL.Add('Order By Ord_Numero');
             Datos.AQ_VOrden.Parameters[0].Value := vDes.Date;
             Datos.AQ_VOrden.Parameters[1].Value := vHas.Date;
             Datos.AQ_VOrden.Open;
y si lo realizo así, no me devuelve todo...

Espero que me entiendan...

Salu2:p:D

egostar 08-05-2008 22:43:18

Hola amigo BlueSteel

Te servira algo como esto?

http://www.bennadel.com/blog/122-Get...SQL-Server.htm

Salud OS

ContraVeneno 08-05-2008 22:47:00

no entendí a que te refieres con "no me devuelve todo"

A mi sí me funciona...
la sentencía:
Código SQL [-]
Select Convert(char(10), getdate(), 103)
me trae la fecha en formato dd/mm/yyyy

egostar 08-05-2008 22:49:39

Lo que pasa es que GetDate() solo es la fecha, pero el campo Ord_Fecha es un campo TimeStamp

Salud OS

egostar 08-05-2008 23:06:44

Encontre otra página con este asunto, a ver si te funciona

http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50569

Salud OS

ContraVeneno 08-05-2008 23:22:38

Cita:

Empezado por egostar (Mensaje 285382)
Lo que pasa es que GetDate() solo es la fecha, pero el campo Ord_Fecha es un campo TimeStamp

Salud OS

mmmm, a mi me regresa fecha y hora:
Cita:

Empezado por F1 MSSQL
GETDATE

Returns the current system date and time in the Microsoft® SQL Server™ standard internal format for datetime values.

Código SQL [-]
 Select getdate()
-------------
2008-05-08 16:28:24.707

egostar 08-05-2008 23:25:48

Hay algo que me parece curioso ustedes usan

Convert(char(10), getdate(), 103)

Pero veo en las páginas que mostre que estan usando esto

Convert(varchar(10),'2005-06-01 15:37:30.087', 101)

tal vez por ahi esta el asunto, no se.....

Salud OS

ContraVeneno 08-05-2008 23:32:51

Cita:

Empezado por F1 MSQL para el estilo de la función CONVERT
Código:

(yy)        (yyyy)        Standard            Input/Output** 
---------------------------------------------------------
0        100        Default                        mon dd yyyy hh:miAM (or PM) 
1        101        USA                        mm/dd/yy 
2        102        ANSI                        yy.mm.dd 
3        103        British/French                dd/mm/yy


Ademas de muchos otros formatos... 20 para ser exactos, desde el formato kuwaiti hasta el canónico.

BlueSteel 08-05-2008 23:59:01

Primero que nada, gracias a todos...

Cita:

Empezado por egostar (Mensaje 285401)
Hay algo que me parece curioso ustedes usan

Convert(char(10), getdate(), 103)

Pero veo en las páginas que mostre que estan usando esto

Convert(varchar(10),'2005-06-01 15:37:30.087', 101)

tal vez por ahi esta el asunto, no se.....

Salud OS

El problema no es utilizar esto Convert(char(10), getdate(), 103) o Convert(varchar(10),'2005-06-01 15:37:30.087', 101), lo que necesito es que en vez de convertir a Varchar(10) sea a tipo Date ..

Cuando realizo la consulta convirtiendo los datos a Varchar(10), me entrega resultados, pero de un los 10 datos (comprobados) que me tiene que entregar, solo me entrega 1...el último....

en cambio si realizo el filtro utilizando el campo fecha sin convertirlo a varchar(10) me devuelve los 10 datos.... (ambas sentencias probadas con los mismos rangos de fechas...)

Aunque se me esta ocurriendo que el campo fecha lo utilice 2 veces.. uno para hacer el filtro (con hora incluido)... y otro para mostrar como fecha (utilizando el convert...)

Estoy revisando los la información...

Salu2:p:D

ContraVeneno 09-05-2008 00:10:37

Cita:

Empezado por BlueSteel (Mensaje 285415)
Aunque se me esta ocurriendo que el campo fecha lo utilice 2 veces.. uno para hacer el filtro (con hora incluido)... y otro para mostrar como fecha (utilizando el convert...)

Eso sería lo más sencillo.

¿el filtro lo aplicas en el dataset? Si es así, pues lo mejor es eso, utilizar el campo dos veces.
Por que el filtrado en SQL, si utilizas o no la función convert, no debería de afectar en nada.

BlueSteel 09-05-2008 01:09:03

Cita:

Empezado por ContraVeneno (Mensaje 285422)
Eso sería lo más sencillo.

¿el filtro lo aplicas en el dataset? Si es así, pues lo mejor es eso, utilizar el campo dos veces.
Por que el filtrado en SQL, si utilizas o no la función convert, no debería de afectar en nada.

Si ya realice eso.. y me funciona salvo cuando... el rango de fecha es dentro del mismo dia...

realice una prueba (sabia que decia arrojar al menos 1 dato...)... con el rango sgte

'04/05/2008' y '05/05/2008' -> funciono.. me da 1 dato
'04/05/2008' y '04/05/2008' -> no funciono... me debia entregar 1 dato

se que es por la hora... pero tratare de ver si los configuro en el DateTimePicke... aunque en ningun caso hago referencia a la hora...

Salu2:p:D

BlueSteel 09-05-2008 01:12:07

Pues.. ahora me funciono... pero realice lo sgte..

a DateTimePicker llamado

vDes... le asigne en Time 0:00:00 y al
vHas... le asigne en Time 23:59:59

y me entrego lo que necesito...

que cosas no ??? si solo estaba utilizando el Date.. y no el Time...

Salu2:p:D

egostar 09-05-2008 02:07:41

Cita:

Empezado por BlueSteel (Mensaje 285446)
Pues.. ahora me funciono... pero realice lo sgte..

a DateTimePicker llamado

vDes... le asigne en Time 0:00:00 y al
vHas... le asigne en Time 23:59:59

y me entrego lo que necesito...

que cosas no ??? si solo estaba utilizando el Date.. y no el Time...

Salu2:p:D

Ah pues mira, abres todo el rango de horas y listo :D:D:D, lo bueno es que lo solucionaste antes de salir de tu trabajo :)

Salud OS

javier7ar 09-05-2008 03:16:52

Por las dudas si te sirve te aclaro un par de cosas:

Cita:

que cosas no ??? si solo estaba utilizando el Date.. y no el Time...
en Delphi el tipo Date esta definido asi:
Código Delphi [-]
type TDate = type TDateTime;
por lo que siempre es TDateTime (fecha y hora) y en SQL Server tambien es fecha y hora siempre.

si queres pasar como parametro solo la fecha sin la hora lo podes hacer asi:
Código Delphi [-]
Datos.AQ_VOrden.Parameters[0].AsDateTime := INT(vDes.Date);
Como el Tipo TDateTime internamente se guarda como un float donde la parte entera es la fecha y la parte decimal es la hora, al hacer el INT() te quedas solo con la parte entera que es la fecha

Con respecto a seleccionar solo la fecha de un campo de DateTime de SQL Server tenes dos opciones:
- Si el problema es solo mostrar, podes asignarle un formato al campo para que muestre solo la fecha. Esto es haciendo doble clic sobre la query, seleccionas el campo de tipo DateTime que queres mostrar solo la fecha y en la propiedad DisplayFormat pones dd/mm/yyyy y con eso solo va a mostrar la fecha (sigue teniendo la hora, pero no la muestra por esta mascara que le pones)

- Si por alguna razon nesesitas que el campo que seleccionas solo tenga la fecha y que sea de tipo DateTime lo podes hacer en SQL Server definiendo una funcion que le quite la parte de la hora. Sinceramente yo no encontre una funcion en SQL Server 2000 que hiciera esto, asi que la hice yo y aca te la dejo:
En el Administrador Corporativo del SQL Server 2000, en la parte de Funciones Definidas por el Usuario, agregas una nueva funcion con lo siguiente:

Código SQL [-]
CREATE FUNCTION dbo.SoloFecha(@Fecha datetime)
RETURNS datetime AS  
BEGIN 
    declare @FechaAux datetime
    
    set @FechaAux = @Fecha

    set @FechaAux = dateAdd(hh, -datePart(hh, @Fecha), @FechaAux)
    set @FechaAux = dateAdd(mi, -datePart(mi, @Fecha), @FechaAux)
    set @FechaAux = dateAdd(ss, -datePart(ss, @Fecha), @FechaAux)
    set @FechaAux = dateAdd(ms, -datePart(ms, @Fecha), @FechaAux)

    return @FechaAux
END

luego en tu consulta haces
Código SQL [-]
select dbo.SoloFecha(Ord_Fecha) as Fecha

tambien lo podes usar en el where para que cuando filtres solo tenga en cuenta la fecha y no la hora

Código SQL [-]
Where dbo.SoloFecha(Ord_Fecha) Between dbo.SoloFecha(:Var1) And dbo.SoloFecha(:Var2)

Bueno, espero que te sirva y que no sea tarde ya
Saludos

BlueSteel 09-05-2008 16:42:19

Hola Javier7ar

Gracias por el aportazo....

provaré lo que mencionastes...y te cuento

Salu2:p:D


La franja horaria es GMT +2. Ahora son las 23:46:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi