PDA

Ver la Versión Completa : To_date


sarackganda
08-10-2003, 21:14:41
¿Existe en SqlServer alguna función con la funcionalidad del TO_DATE de Oracle?, estoy trabajando en SqlServer 7, pero si la solución solo funciona en 2000 será bienvenida.
A grandes rasgos el TO_DATE de Oracle, convierte un string a un tipo DATE (Fecha+Hora) especificando la máscara del string pasado, por ejemplo:

TO_DATE('28/02/2003', 'DD/MM/YYYY')
TO_DATE('02/28/2003', 'MM/DD/YYYY')
TO_DATE('20030228', 'YYYYMMDD')
TO_DATE('28/02/2003 05:45:00', 'DD/MM/YYYY HH:MI:SS')



Chagracia!

guillotmarc
08-10-2003, 22:07:12
Mira en la documentación la sintaxis y parámetros de la función CONVERT.

Por cierto, si hubieses buscado en la documentación de SQL Server la palabra TO_DATE, te hubiese enviado directamente al documento de migración de funciones de Oracle a SQL Server, donde te indica que debes usar las funciones CAST y CONVERT de SQL Server.

Saludos.

delphi.com.ar
08-10-2003, 22:27:16
A mi parecer ni el CAST ni el CONVERT tienen toda la funcionalidad del TO_DATE, ya que el TO_DATE es mucho mas flexible permitiéndonos aclarar la máscara, sin tener que atarnos a una lista de estilos predeterminada como la de SqlServer.
Con el TO_DATE podríamos hacer locuras como TO_DATE('HORA:12 MINUTOS:03 SEGUNDOS:33', '"HORA:"HH" MINUTOS:"MI" SEGUNDOS:"SS'), y sabría de dónde tomar el dato de la hora, minuto y segundo, que desconozco como hacerlas desde SqlServer.

Con el cast tendríamos problemas con fechas como 01/02/2003 donde supongo que dependerá de la configuración de la sesión si el mes es 01 o 02.


Saludos!

guillotmarc
08-10-2003, 22:53:46
En efecto el CAST es la menos recomendable de todas, y la función CONVERT está limitada a la lista predeterminada.

Para convertir algo como TO_DATE('HORA:12 MINUTOS:03 SEGUNDOS:33', '"HORA:"HH" MINUTOS:"MI" SEGUNDOS:"SS'), en SQL Server tendrias que jugar con el SUBSTRING para sacar las partes de la hora, y construir una de las cadenas que si puede convertir.

SET @Variable = 'HORA:12 MINUTOS:03 SEGUNDOS:33'
select CAST(SUBSTRING(@Variable, 6, 2) + ':' + SUBSTRING(@Variable, 18, 2) + ':' SUBSTRING(@Variable, 30, 2) as DATETIME)

Sin duda es mucho más incomodo.

Saludos.