You are on page 1of 5

Funciones para el uso de fechas y horas

Microsoft SQL Server ofrece algunas funciones para trabajar con fechas y horas. Estas son algunas: - getdate(): retorna la fecha y hora actuales. Ejemplo: select getdate(); - datepart(partedefecha,fecha): retorna la parte específica de una fecha, el año, trimestre, día, hora, etc. Los valores para "partedefecha" pueden ser: year (año), quarter (cuarto), month (mes), day (dia), week (semana), hour (hora), minute (minuto), second (segundo) y millisecond (milisegundo). Ejemplos: select datepart(month,getdate()); retorna el número de mes actual; select datepart(day,getdate()); retorna el día actual; select datepart(hour,getdate()); retorna la hora actual; - datename(partedefecha,fecha): retorna el nombre de una parte específica de una fecha. Los valores para "partedefecha" pueden ser los mismos que se explicaron anteriormente. Ejemplos: select datename(month,getdate()); retorna el nombre del mes actual; select datename(day,getdate()); - dateadd(partedelafecha,numero,fecha): agrega un intervalo a la fecha especificada, es decir, retorna una fecha adicionando a la fecha enviada como tercer argumento, el intervalo de tiempo indicado por el primer parámetro, tantas veces como lo indica el segundo parámetro. Los valores para el primer argumento pueden ser: year (año), quarter (cuarto), month (mes), day (dia), week (semana), hour (hora), minute (minuto), second (segundo) y millisecond (milisegundo). Ejemplos: select dateadd(day,3,'1980/11/02'); retorna "1980/11/05", agrega 3 días.

16.'2006/10/28'). . agrega 3 meses.select dateadd(month. select datediff(month. retorna "1981/02/02". select dateadd(minute.'1980/11/02').fecha2): calcula el intervalo de tiempo (según el primer argumento) entre las 2 fechas.'1980/11/02').month(fecha): retorna el mes de la fecha especificada.'2005/10/28'.day(fecha): retorna el día de la fecha especificada.3.2. .'1980/11/02'). retorna 13 (meses). El resultado es un valor entero que corresponde a fecha2-fecha1. retorna 365 (días). Ejemplos: select datediff (day. .'2005/10/28'. Se pueden emplear estas funciones enviando como argumento el nombre de un campo de tipo datetime o smalldatetime. agrega 16 minutos. Ejemplo: select day(getdate()).datediff(partedelafecha. Ejemplo: select year(getdate()). agrega 2 horas. retorna "1980/02/02 00:16:00". . Los valores de "partedelafecha) pueden ser los mismos que se especificaron anteriormente. retorna "1980/02/02 2:00:00". .year(fecha): retorna el año de la fecha especificada. Ejemplo: select month(getdate()).'2006/11/29').fecha1. select dateadd(hour.

Por ejemplo. sin una parte de hora. '19970523' y '970523' se interpretan como '1997-05-23'. Como cadena de caracteres sin delimitadores en formato 'YYYYMMDD' o 'YYMMDD' . '98/12/31 11*30*45'.1. Como cadena de caracteres sin delimitadores en formato 'YYYYMMDDHHMMSS' o 'YYMMDDHHMMSS'. y '98@12@31' son equivalentes. '98. '98-12-31'. Estas propiedades se describen posteriormente en esta sección. pero '971332' es ilegal (tiene una parte de mes y día sin sentido) y se convierte en '0000-00-00'. Una sintaxis “relajada” se permite: Cualquier carácter de puntuación puede usarse como delimitador entre partes de fecha o de hora. Como número en formato YYYYMMDDHHMMSS o YYMMDDHHMMSS.12. '19970523091528' y '970523091528' se interpretan como '1997-05-23 09:15:28'. DATE. como NOW() o CURRENT_DATE. . MySQL recibe y muestra los valores DATE en formato 'YYYY-MM-DD' . Por ejemplo. Por ejemplo. El rango soportado es de '1000-01-01' a '9999-12-31'. MySQL recibe y muestra los valores DATETIME en formato 'YYYY-MM-DD HH:MM:SS' . DATE. Se permite una sintaxis “relajada” . Por ejemplo. mientras que la cadena de caracteres tenga sentido como fecha. Propiedades de TIMESTAMP desde MySQL 4. Puede especificar valores DATETIME. mientras que el cadena de caracteres tenga sentido como fecha.1. '98. Por ejemmplo. Como resultado de una función que retorne un valor acceptable en un contexto DATETIME. Como número en formato YYYYMMDD o YYMMDD. Por ejemplo. y '98@12@31 11^30^45' son equivalentes. Esta sección describe sus características. DATE. (“Soportado” significa que aunque valores anteriores pueden funcionar.3. mientras que el número tenga sentido como fecha. Como cadena de caracteres en formato 'YYYY-MM-DD' or 'YY-MM-DD' . 19830905 y 830905 se interpretan como '198309-05'. pero '971122129015' es ilegal (tiene una parte de minutos sin sentido) y se convierte en '0000-00-00 00:00:00'. 19830905132800 y 830905132800 se interpretan como '1983-09-05 13:28:00'.12. '98/12/31'. en qué se parecen y en qué difieren.1 Los tipos DATETIME. mientras que el número tenga sentido como fecha. o TIMESTAMP . El tipo DATETIME se usa cuando necesita valores que contienen información de fecha y hora. El rango soportado es de '1000-01-01 00:00:00' a '9999-12-31 23:59:59'. y TIMESTAMP usando cualquier de los siguientes formatos:        Como cadena de caracteres en formato 'YYYY-MM-DD HH:MM:SS' o 'YY-MM-DD HH:MM:SS' . El tipo TIMESTAMP tiene varias propiedades.11. no hay garantías) El tipo DATE se usa cuando necesita sólo un valor de fecha. '9812-31 11:30:45'.31'.31 11+30+45'. en función de la versión de MySQSL y el modo SQL que esté ejecutando el servidor. and TIMESTAMP están relacionados.

así que el valor no es una fecha legal. se asume que está en formato YYYYMMDD o YYYYMMDDHHMMSS y que el año lo dan los primeros 4 dígitos. no es necesario especificar dos dígitos para valores de mes o día menores que 10. hora. pensando que representa Marzo. para tantas partes como representa la cadena de caracteres. minuto y segundo. pero si se usa en un contexto de fecha se interpreta como '2010-11-12'. 1999. la parte temporal del valor resultante se borra porque el tipo DATE no tiene información temporal. 8. Tenga en cuenta que aunque DATETIME. hay algunas alteraciones del valor o pérdidas de información:    Si asigna un valor DATE a un objeto DATETIME o TIMESTAMP. o 14 dígitos. se supone que el año lo dan los primeros 2 caracteres. mes. Sin embargo. se asume que está en formato YYMMDD o YYMMDDHHMMSS y que el año lo dan los primeros 2 dígitos. o TIMESTAMP se convierten al valor “cero” del tipo apropiado ('0000-00-00 00:00:00'. minutos o segundos menores que 10. TIMESTAMP no pueden ser anteriores a 1970 o posteriores a 2037. puede especificar explícitamente un valor de cero para representar partes de día y mes. que sería legal como DATETIME o DATE no es un valor válido TIMESTAMP y se convierte a 0 si se asigna a un objeto de este tipo. Por ejemplo. Para valores especificados como cadenas de caracteres que incluyan partes de fecha delimitadas. Esto es porque el valor de año y mes son 99 y 03. un valor como '10:11:12' puede parecer una hora por el delimitador ':' . . Si la cadena de caracteres tiene longitud 8 o 14. y TIMESTAMP pueden especificarse usando el mismo conjunto de formatos. o 00000000000000). Si el número tiene 6 o 12 dígitos de longitud. El valor '10:45:15' se convierte a '0000-00-00' ya que '45' no es un mes legal. A los números que no tengan estas longitudes se les añaden ceros a la izquierda hasta la longitud más cercana permitida. Si un número tiene una longitud de 8 o 14 dígitos. Por ejemplo. no es necesario especificar dos dígitos para horas. MySQL inserta un valor “cero” en la tabla. el año se asume como dado por los primeros 4 caracteres. la parte de hora del valor resultante se cambia a '00:00:00' ya que el valor DATE no contiene información temporal. Puede asignar valores de un tipo a un objeto de un tipo diferente hasta un límite. 12. Si asigna un valor DATETIME o TIMESTAMP a un objeto DATE. para valores especificados como cadenas de caracteres que incluyan delimitadores para la parte de hora. puede usar '990300' para insertar el valor '1999-03-00'. En el resto de caso.Los valores ilegales de DATETIME. Esto significa que una fecha como '1968-01-01'. Por ejemplo. '1979-6-9' es lo mismo que '1979-06-09'. día. pero la parte de día no se encuentra. Sin embargo. Tenga en cuenta ciertas cosas al especificar valores temporales:  El formato relajado para valores especificados como cadenas de caracteres puede ser problemático. los tipos no tienen el mismo rango de valores. '1979-10-30 1:2:3' es lo mismo que '1979-10-30 01:02:03'. Los valores especificados como números deben tener una longitud de 6. si especifica '9903'. La cadena de caracteres se interpreta de izquierda a derecha para encontrar el año. Por ejemplo. '0000-00-00'. Similarmente. Los valores especificados como cadenas de caracteres no delimitadas se interpretan usando su longitud. Esto significa que no debe usar cadenas de caracteres con menos de 6 caracteres. DATE. DATE.

15 Mar 18 -. 103) SELECT convert(varchar. 7) SELECT convert(varchar. getdate().03/15/2018 -. 11) YY/MM/DD -. getdate(). Cualquier fecha que contenga partes fuera de estos rangos está sujeta a conversión a '0000-00-00'.18 -. 107) SELECT convert(varchar. 104) SELECT convert(varchar. getdate().15-03-2018 -. MySQL interpreta los años de dos dígitos usando las siguientes reglas:  Los valores de años en el rango 00-69 se convierten a 2000-2069. Para asegurar que una fecha es válida. 2018 -.15/03/2018 -. getdate().180315 -. getdate().15.2018 -.15.03. 111) SELECT convert(varchar.                 -.  El servidor MySQL realiza sólo chequeo básico de la validez de las fechas: Los rangos para año.YYMMDD . getdate().2018/03/15 -. mes y día son de 1000 a 9999. 106) SELECT convert(varchar. Tenga en cuenta que esto permite almacenar fechas inválidas como '2002-04-31'. 102) SELECT convert(varchar.15/03/18 -. getdate().03. respectivamente. 101) MM/DD/YYYY SELECT convert(varchar.String date only formats SELECT convert(varchar.15 -. y 00 a 31.Mar 15. 4) SELECT convert(varchar. haga una comprobación en su aplicación. getdate(). getdate(). 105) SELECT convert(varchar.18/03/15 ---- SELECT convert(varchar. Fechas con valores de año de dos dígitos son ambíguas porque no se conoce el siglo. getdate(). getdate(). getdate(). getdate().  Los valores de años en el rango 70-99 se convierten a 1970-1999. 112) SELECT convert(varchar. 5) SELECT convert(varchar.15 Mar 2018 -.03. getdate(). 18 -.15-03-18 -.20180315 -. 12) -. getdate(). 3) MM/DD/YY SELECT convert(varchar.Mar 15. getdate(). 6) SELECT convert(varchar. 00 a 12.2018.