Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
T RABAJANDO
CON FECHAS
SQL Server provee tipos de datos especiales para el manejo de valores fechas y hora, estos tipos facilitan el
manejo y validacin de este tipo de informacin tan importante.
Hasta SQL 2008 los tipos de datos para guardar valores tipo fecha haban sido los tipos de datos DATETIME y
SMALLDATETIME, estos tipos de datos almacenan tanto la hora como la fecha de forma conjunta. Luego en
SQL 2008 aparecen otros tipos que agregan muchas posibilidades como son: manejar la fecha y la hora de
forma separada, rango de validez incrementado, etc.
ALMACENAMIENTO
En qu formato se guarda el valor?, SQL guarda los datos de fecha y hora como valores enteros de 2 o 4 bytes.
El tipo DATETIME toma los primeros 4 bytes para la fecha y los otros 4 bytes para la hora, el tipo
SMALLDATETIME toma 2 bytes para cada valor. Esto quiere decir que la fecha no se guarda en DD/MM/YYY o
MM/DD/YYYY, etc., sino como un nmero.
TIPOS DE DATOS
TIPO
DATETIME
SMALLDATETIME
TIMESTAMP
Bytes
8
4
Rango
Jan 1, 1753 - Dec 31, 9999
Jan 1, 1900 - Jun 6, 2079
0001-01-01 - 9999-12-31
3a5
00:00:00.0000000 - 23:59:59:9999999
3a6
0001-01-01
9999-12-31
DATE
(SQL 2008)
TIME
(Nuevo en SQL
hh:mm:ss.nnnnnnn)
2008.
Maneja
el
formato
DATETIME2
(Es similar al DATETIME pero con un mayor rango.)
00:00:00.0000000
23:59:59.9999999
INSERTANDO
SQL soporta varios formatos para insertar o colocar un valor tipo fecha, estos valores sea cual sea el formato
deben ser fechas validas. La mayor parte de los formatos validar las configuraciones del lenguaje donde se
est aplicando la sentencia, sin embargo resulta mucho ms prctico utilizar el estndar ANSI (YYYYMMDD
HH:MM:SS) y no depender de configuraciones regionales.
Antes de existir el tipo de dato DATE debamos tener especial cuidado al momento de insertar en valor tipo
fecha con el tema de la parte del tiempo (HH:MM:SS). Si el inters es manejar una fecha corta (YYYYMMDD)
entonces se registra 00:00:00 en la parte del tiempo, esto permite que la fecha puede ser consultada sin indicar
el tiempo. Si el inters es manejar la fecha larga (YYYYMMDD HH:MM:SS) entonces debemos siempre
consultar la fecha tomando en cuenta el tiempo, de lo contrario esos registros que tienen ese dato del tiempo no
apareceran a menos que se filtre por un rango: Fecha BETWEEN 2011-01-01 00:00:00 and 2011-01-01
SQL Server Carlos Caraballo
Page 1
23:59:00, algo as tomara en cuenta todos los registros de la fecha 2011-01-01 con cualquier hora que tenga
registrada.
INSERT INTO empleado( fecha) VALUES( 20110120 22:01:20)
Insertando la fecha en formato ANSI. La hora se indica en el esquema de 24 horas.
SET DATEFORMAT
Si no se quiere utilizar el formato ANSI el parmetro DATEFORMAT puede ser utilizado para indicar el formato
(da/mes o mes/da) que deseamos utilizar para registrar o consultar un valor tipo fecha.
SET DATEFORMAT mdy
INSERT INTO empleado( fecha) VALUES( 01/20/2010)
Se le indica al manejador aceptar el valor en el formato mes da.
FORMATOS Y CONVERSIONES
Las funciones CAST y CONVERT pueden ser utilizadas para convertir valores fechas, de string a fecha y
viceversa o convertir una fecha a un formato o estilo indicado. Ambas funciones trabajan las labores de
conversin, sin embargo solo la funcin CONVERT nos permite indicar el formato de fecha para el resultado. A
continuacin vamos a ver una tabla con los diferentes formatos que podemos aplicar.
Input/Output**
0 or 100 (*)
Default
101
USA
mm/dd/yy
102
ANSI
yy.mm.dd
103
British/French
dd/mm/yy
104
German
dd.mm.yy
Page 2
105
Italian
dd-mm-yy
106
dd mon yy
107
Mon dd, yy
108
hh:mm:ss
9 or 109 (*)
Default + milliseconds
mon dd yyyy
hh:mi:ss:mmmAM (or PM)
10
110
USA
mm-dd-yy
11
111
JAPAN
yy/mm/dd
12
112
ISO
yymmdd
13 or 113 (*)
Europe default +
dd mon yyyy
milliseconds
hh:mm:ss:mmm(24h)
14
114
hh:mi:ss:mmm(24h)
20 or 120 (*)
ODBC canonical
yyyy-mm-dd hh:mi:ss(24h)
21 or 121 (*)
yyyy-mm-dd
milliseconds)
hh:mi:ss.mmm(24h)
ISO8601
yyyy-mm-dd
126(***)
Thh:mm:ss.mmm(no spaces)
-
130*
Hijri****
dd mon yyyy
hh:mi:ss:mmmAM
131*
Hijri****
dd/mm/yy hh:mi:ss:mmmAM
http://msdn.microsoft.com/en-us/library/aa226054(v=sql.80).aspx
FORMATOS EN LA FECHA
Format #
Sample
12/30/06
06.12.30
30/12/06
30.12.06
30-12-06
Page 3
30 Dec 06
Dec 30, 06
10
12-30-06
11
06/12/30
101
12/30/2006
102
2006.12.30
103
30/12/2006
104
30.12.2006
105
30-12-2006
106
30 Dec 2006
107
110
12-30-2006
111
2006/12/30
00:38:54
9 or 109
14 or 114
00:38:54:840
F U N CI O N E S
SQL provee un grupo de funciones que permiten desde conseguir la fecha y hora actual del sistema hasta
realizar cualquier tipo de operaciones matemticas con estos valores.
Funcin
Descripcin
Ejemplo
Page 4
CURRENT_TIMESTAMP
GETDATE()
DAY
MONTH
YEAR
DATEPART
SELECT CURRENT_TIMESTAMP
Res: 2011-01-01 12:20:20
SELECT GETDATE()
SELECT DAY(GETDATE())
SELECT MONTH( GETDATE())
SELECT YEAR( GETDATE())
Fecha: '5 December 2009 13:24:56'
DATEPART( hh,fecha) : 13
DATEPART( dy,fecha) : 339
DATEPART( dw,fecha) : 7
DATEPART( yy,fecha) : 2009
DATENAME
DATEDIFF
DATEADD
Fecha: 12/20/2010
SELECT DATENAME(mm,fecha)
Saca el valor Diciembre
SELECT DATEDIFF( dd,fecha,GETDATE() )
Resta GETDATE fecha y devuelve el
resultado en das.
Fecha: 12/20/2010
SELECT DATEADD(mm,2,fecha)
Suma 2 meses al valor fecha.
R EFERENCIAS
http://msdn.microsoft.com/en-us/library/aa226054(v=sql.80).aspx
http://www.blackwasp.co.uk/SQLDateTimeInfoFunctions.aspx
http://msdn.microsoft.com/en-us/library/ms189794.aspx
Page 5