Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-06-2007
patorecalde patorecalde is offline
Miembro
 
Registrado: jul 2006
Posts: 35
Poder: 0
patorecalde Va por buen camino
Question Formato fecha

Estimada gente del foro, hace bastante tiempo estoy con este tema cada vez que hago consultas nunca me da el mismo resultado, trabajo con mssql 2000 y me pregunto lo siguiente:

1- Como hago para formatear la fecha en un formato especifico para una sesion y cuales son los formatos disponibles?

2- cual es el formato que viene por defecto?

3- como hago para ver el dia solo, o ver el mes de una fecha.

utilizo el formato datetime, desde ya gracias por el tiempo que brindan al presente.
Responder Con Cita
  #2  
Antiguo 28-06-2007
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Con FormatDateTime:
Código Delphi [-]
dia:=FormatDateTime('dd',miFecha);
mes:=FormatDateTime('mm',miFecha);
Ann:=FormatDateTime('yy',miFecha);

diaCompleto:=FormatDateTime('ddd',miFecha);

Hay que tener en cuenta que devuelve una cadena.

Existen funciones específicas dependiendo del motor de conexión:
Month, Year, Day, Extract(Year From fecha)

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #3  
Antiguo 29-06-2007
patorecalde patorecalde is offline
Miembro
 
Registrado: jul 2006
Posts: 35
Poder: 0
patorecalde Va por buen camino
Wink Cambiar formato de fecha..

Estimados, probe los cambios con FormatDateTime y las cosas me van de maravilllas, ahora supongamos lo siguiente cuando hago una consulta a una tabla con una columna de tipo datetime me lo muestra de la siguiente manera 2007-06-25 13:30:21.857, como hago para que me muestre dia, mes y año y luego la fecha, como cambio el formato de visualizacion, y si logro cambiarlo esto sera para siempre???

desde ya , gracias.

un abrazo a todos.
Responder Con Cita
  #4  
Antiguo 29-06-2007
Avatar de __hector
[__hector] __hector is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Santo Domingo, Rep. Dom.
Posts: 1.075
Poder: 23
__hector Va por buen camino
Hablas de delphi, o de sql server?

En sql server tienes la funcion CAST y CONVERT, que te permiten formatear una fecha. Tienen varios formatos preestablecidos, pero te permiten tambien especificar el formato en el que quieres mostrarlo.

Para establecer el formato de fecha del servidor tambien tienen una propiedad, SET DATEFORMAT, que puedes utilizar.

Puedes buscar informacion en los books online de sql server
__________________
Héctor Geraldino
Software Engineer
Responder Con Cita
  #5  
Antiguo 29-06-2007
patorecalde patorecalde is offline
Miembro
 
Registrado: jul 2006
Posts: 35
Poder: 0
patorecalde Va por buen camino
Wink ya casi lo tengo...

Estimados,estoy trabajando con sql 2000, utilizando la funcion convert de la siguiente manera select convert(varchar,getdate(),101) y cambiando el 101 por las opciones que obtengo de la ayuda observo los datos ok, pero cuando quiero formatear la hora para la sesion de esta manera SET DATEFORMAT 'mm/dd/yyyy' me da el siguiente error
SET DATEFORMAT date order 'mm/dd/yyyy' is invalid.
Otra cosita cual es el formato que tiene por defecto el mssql 2000.\

muchas gracias.

Abrazo.
Responder Con Cita
  #6  
Antiguo 11-07-2007
Avatar de nuk3zito
nuk3zito nuk3zito is offline
Miembro
 
Registrado: ago 2003
Ubicación: "Z" Land
Posts: 244
Poder: 21
nuk3zito Va por buen camino
El formato por defecto de las fechas de MS SQL Server es el formato propio de la configuración regional de Windows. Si cambias la configuración regional de Windows, automáticamente cambias el formato de visualización en SQL Server.

Una sugerencia más: para enviarle fechas al sql server existe un formato estándar, el cual es yyyymmdd con comillas simples, ejemplo:

Código:
select * from movimientos
where Fecha = '20070711'
en desde Delphi se lo puedes enviar así:
Código:
with ADOQuery1 do
begin
  SQL.Clear;
  SQL.Add('select * from Movimientos');
  SQL.Add('where Fecha = ''' + FormatDateTime('yyyymmdd', dFecha) + '''');
  Open;
end;
Donde ADOQuery1 es un componente tipo TADOQuery y dFecha es una variable tipo TDate o TDateTime.

Saludos
__________________
Tiempo y ocasión acontecen a todos!
Responder Con Cita
  #7  
Antiguo 20-07-2007
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Poder: 19
JCarlosas Va por buen camino
El formato de la fecha de SQL por defecto es como dice nuk3zito
pero puede ser configurado.
SQL Server permite configurar los formatos de fecha, moneda etc por usuario por Base de datos.
O sea un mismo usuario puede tener formatos distintos en disitintas BD o una misma BD puede devolver la fecha, moneda etc en disitinto formato en dependencia del usuario con el cual se conecte a la BD para realizar la consulta.
Esto es configurable.

Saludos.
JCarlos
Responder Con Cita
  #8  
Antiguo 20-07-2007
Avatar de nuk3zito
nuk3zito nuk3zito is offline
Miembro
 
Registrado: ago 2003
Ubicación: "Z" Land
Posts: 244
Poder: 21
nuk3zito Va por buen camino
Cita:
Empezado por JCarlosas
El formato de la fecha de SQL por defecto es como dice nuk3zito
pero puede ser configurado.
SQL Server permite configurar los formatos de fecha, moneda etc por usuario por Base de datos.
JCarlos
Perdón JCarlos... este formato es el estándar, este no puede ser configurado. Es el formato ANSI y no hay variantes. Sin embargo, si usas diagonales o guiones, esos otros formatos son los que si se pueden configurar... pero si optas por enviar la cadena en formato 'yyyymmdd', este no es configurable por cuestión de compatibilidad entre diversos motores de SQL.
__________________
Tiempo y ocasión acontecen a todos!
Responder Con Cita
  #9  
Antiguo 20-07-2007
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Poder: 19
JCarlosas Va por buen camino
Quizas no me exprese bien.
Me referia al formato en que te devuelve la fecha el MS SQL Server en una cosulta del tipo:

select Fecha from movimientos where ...

Ese formato puede ser configurado en "Enterprise Manager" de MS SQL por el duo (usuario, BD).

Saludos
JCarlos
Responder Con Cita
  #10  
Antiguo 20-07-2007
Avatar de nuk3zito
nuk3zito nuk3zito is offline
Miembro
 
Registrado: ago 2003
Ubicación: "Z" Land
Posts: 244
Poder: 21
nuk3zito Va por buen camino
cierto

No hablabas del formato estándar... tienes razón.
Una cosa es el formato estandar (ANSI) y otra... el de la configuración regional de windows, el cual si pudes copnfigurar también en SQL Server.
(a ver si no reburujo a los lectores)
__________________
Tiempo y ocasión acontecen a todos!
Responder Con Cita
  #11  
Antiguo 23-07-2007
patorecalde patorecalde is offline
Miembro
 
Registrado: jul 2006
Posts: 35
Poder: 0
patorecalde Va por buen camino
Question mmm...

Entonces supongamos lo siguiente, si tengo el formato configurado en el sql como mmddyyyy y le paso una fecha del tipo ddmmyyyy me va a tirar error verdad?
Ahora si antes de la consulta formateo para la sesion la fecha de esta manera
set dateformat dmy y luego le paso valores de tipo fecha con el formato ddmmyyyy, asi ya no me tira el error verdad?

desde ya gracias.

un abrazo.
Responder Con Cita
  #12  
Antiguo 23-07-2007
Avatar de nuk3zito
nuk3zito nuk3zito is offline
Miembro
 
Registrado: ago 2003
Ubicación: "Z" Land
Posts: 244
Poder: 21
nuk3zito Va por buen camino
no se si entendí bien

Cita:
Empezado por patorecalde
Entonces supongamos lo siguiente, si tengo el formato configurado en el sql como mmddyyyy y le paso una fecha del tipo ddmmyyyy me va a tirar error verdad?
Bueno, de antemano si sabes que no siempre te dará error más que en las fechas donde le estés diciendo que el mes es mayor a 12 (p.ej. 13/01/2007, lo cual el SQL Server entendería que es el mes 13, día 1 del año 2007. Creo que eso si queda claro, ok, SI te daría error en esos casos.

Cita:
Empezado por patorecalde
Ahora si antes de la consulta formateo para la sesion la fecha de esta manera
set dateformat dmy y luego le paso valores de tipo fecha con el formato ddmmyyyy, asi ya no me tira el error verdad?
En teoría no te debería dar error. Pero te sugiero lo que comenté en un post anterior.
Mejor envíale la cadena de manera 'yyyymmdd' (sin diagonales) y SQL Server entenderá siempre la fecha independientemente de lo que tengas en la configuración del formato, ya que sería su formato estandar.
__________________
Tiempo y ocasión acontecen a todos!
Responder Con Cita
  #13  
Antiguo 24-07-2007
patorecalde patorecalde is offline
Miembro
 
Registrado: jul 2006
Posts: 35
Poder: 0
patorecalde Va por buen camino
Question esta todo casi ok!!!

Estimado nuk3zito, te cuento que probado lo que dices y esta todo ok, el inconveniente se me presenta cuando pretendo obtener informacion de un horario especifico, supongamos que quiero obtener las ventas de hoy en el rango de las 10:00 hs y las 12:00 hs, como hago para enviar horas en este formato de fecha?

desde ya gracias por tu tiempo y el de todos.

abrazo.
Responder Con Cita
  #14  
Antiguo 24-07-2007
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Poder: 19
JCarlosas Va por buen camino
Cita:
Empezado por nuk3zito
Una sugerencia más: para enviarle fechas al sql server existe un formato estándar, el cual es yyyymmdd con comillas simples, ejemplo:

Código:
select * from movimientos
where Fecha = '20070711'
en desde Delphi se lo puedes enviar así:
Código:
with ADOQuery1 do
begin
  SQL.Clear;
  SQL.Add('select * from Movimientos');
  SQL.Add('where Fecha = ''' + FormatDateTime('yyyymmdd', dFecha) + '''');
  Open;
end;
Para este caso me queda la duda tambien en caso de que necesite especificar la hora. ¿Como seria el formato:? ¿¿¿´yyymmdd hh:nn:ss´????

Nota: Por nn me referi a los minutos
Saludos a todos
JCarlos
Responder Con Cita
  #15  
Antiguo 24-07-2007
Avatar de nuk3zito
nuk3zito nuk3zito is offline
Miembro
 
Registrado: ago 2003
Ubicación: "Z" Land
Posts: 244
Poder: 21
nuk3zito Va por buen camino
Cita:
Empezado por JCarlosas
Para este caso me queda la duda tambien en caso de que necesite especificar la hora. ¿Como seria el formato:? ¿¿¿´yyymmdd hh:nn:ss´????

Nota: Por nn me referi a los minutos
Saludos a todos
JCarlos
OK, Ya estamos de acuerdo en que el formato ANSI para fechas es yyyymmdd.
Bueno, para horas solo existe un formato (pudiéramos hacer de cuenta que es el ANSI en vista de que no conozco otro, sáquenme del error en caso de estar mal informado) y es el hh:mm[:ss] como lo muestra el siguiente ejemplo.

Código:
  AdoQuery.SQL.Add('select * from Movimientos');
  AdoQuery.SQL.Add('where fechahora >= ''20070724 10:00''');
  AdoQuery.Open;
O sea, esta instrucción nos regresa los registros con fecha y hora mayor o igual al 24 de Julio de 2007 a las 10:00 a.m.

Sin embargo, si estamos creando estas consultas desde Delphi debo admitir que no me gusta para nada usar las horas de esta manera en el SQL Server. Lo hago como sigue:
Cuando utilizo solo fechas en un query, efectivamente utilizo el formato ANSI.
Cuando se trata de mezclar fechas y horas, yo prefiero enviarlo como un parámetro al componente, y dejar que el Delphi se encargue de hacer el trabajo sucio (Sin embargo, es válido hacerlo como especifiqué en el ejemplo anterior).
Para que no haya dudas, les pondré el ejemplo de la alternativa que pueden seguir (y se evitan de broncas porque es más engorroso construir la cadena de fecha y hora y luego enviarlo a la consulta ):
Código:
var
  dtFechaHora: TDateTime;
begin
  dtFechaHora:= EncodeDate(2007, 7, 24) + EncodeTime(10,0,0,0);
  // tambien así es válido
  dtFechaHora:= EncodeDateTime(2007, 7, 24, 10, 0, 0, 0);
  ...
  AdoQuery.SQL.Add('select * from Movimientos');
  AdoQuery.SQL.Add('where fechahora >= :FechaHora ');
  AdoQuery.Parameters.ParamByName('FechaHora').Value:= dtFechaHora;
  AdoQuery.Open;
Espero haber podido darles una orientación.
__________________
Tiempo y ocasión acontecen a todos!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Formato de fecha GustavoCruz SQL 8 26-06-2007 04:39:11
Formato fecha Io Varios 2 22-08-2006 13:55:04
formato de fecha ebeltete Varios 2 22-06-2006 16:36:26
Como cambiar el formato de un QRSysData en formato fecha Bitbanner Tablas planas 1 13-02-2005 12:33:26
Como Obviar el formato de Fecha del Servidor para Salvar sólo en formato "dd/mm/yyyy" R_Richards Varios 4 07-02-2005 15:57:19


La franja horaria es GMT +2. Ahora son las 07:27: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
Copyright 1996-2007 Club Delphi