T SQL Fechas en sql server

Published on December 2016 | Categories: Documents | Downloads: 68 | Comments: 0 | Views: 513
of 5
Download PDF   Embed   Report

Comments

Content

TRANSACT-SQL
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 validación de este tipo de información tan importante.
Hasta SQL 2008 los tipos de datos para guardar valores tipo fecha habían 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 número.

TIPOS DE DATOS
TIPO
DATETIME
SMALLDATETIME
TIMESTAMP

Bytes
8
4

Rango
Jan 1, 1753 - Dec 31, 9999
Jan 1, 1900 - Jun 6, 2079

3

0001-01-01 - 9999-12-31

3a5

00:00:00.0000000 - 23:59:59:9999999

3a6

0001-01-01
9999-12-31

(Se utiliza para marcar un registro con la fecha de
actualización o inserción)

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 más práctico utilizar el estándar ANSI (YYYYMMDD
HH:MM:SS) y no depender de configuraciones regionales.
Antes de existir el tipo de dato DATE debíamos tener especial cuidado al momento de insertar en valor tipo
fecha con el tema de la parte del tiempo (HH:MM:SS). Si el interés 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 interés 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
aparecerían 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í tomaría 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.

INSERT INTO empleado( fecha) VALUES( ‘20110120’)
Insertando la fecha en formato ANSI. Si el campo fecha es un DATETIME se grabará 00:00:00 en la parte del tiempo,
esto permite que el registro pueda ser consultado indicando solo la parte de la fecha. Cuando se indica la hora siempre
tendremos que contemplar la hora en la consulta.

SET DATEFORMAT
Si no se quiere utilizar el formato ANSI el parámetro DATEFORMAT puede ser utilizado para indicar el formato
(“día/mes “o “mes/día”) 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 día.

SET DATEFORMAT dmy
INSERT INTO empleado( fecha) VALUES( ‘20/01/2010’)
Se le indica al manejador aceptar el valor en el formato día mes.

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
conversión, sin embargo solo la función CONVERT nos permite indicar el formato de fecha para el resultado. A
continuación vamos a ver una tabla con los diferentes formatos que podemos aplicar.

Without century (yy)

With century (yyyy)
Standard

Input/Output**

-

0 or 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

4

104

German

dd.mm.yy

SQL Server – Carlos Caraballo

Page 2

5

105

Italian

dd-mm-yy

6

106

-

dd mon yy

7

107

-

Mon dd, yy

8

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 (*)

ODBC canonical (with

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 #

Query (current date: 12/30/2006)

Sample

1

select convert(varchar, getdate(), 1)

12/30/06

2

select convert(varchar, getdate(), 2)

06.12.30

3

select convert(varchar, getdate(), 3)

30/12/06

4

select convert(varchar, getdate(), 4)

30.12.06

5

select convert(varchar, getdate(), 5)

30-12-06

SQL Server – Carlos Caraballo

Page 3

6

select convert(varchar, getdate(), 6)

30 Dec 06

7

select convert(varchar, getdate(), 7)

Dec 30, 06

10

select convert(varchar, getdate(), 10)

12-30-06

11

select convert(varchar, getdate(), 11)

06/12/30

101

select convert(varchar, getdate(), 101)

12/30/2006

102

select convert(varchar, getdate(), 102)

2006.12.30

103

select convert(varchar, getdate(), 103)

30/12/2006

104

select convert(varchar, getdate(), 104)

30.12.2006

105

select convert(varchar, getdate(), 105)

30-12-2006

106

select convert(varchar, getdate(), 106)

30 Dec 2006

107

select convert(varchar, getdate(), 107)

Dec 30, 2006

110

select convert(varchar, getdate(), 110)

12-30-2006

111

select convert(varchar, getdate(), 111)

2006/12/30

FORMATOS PARA TIEMPO
8 or 108

select convert(varchar, getdate(), 8)

00:38:54

9 or 109

select convert(varchar, getdate(), 9)

Dec 30 2006 12:38:54:840AM

14 or 114

select convert(varchar, getdate(), 14)

00:38:54:840

SELECT CAST ( fecha as varchar )…..
Convierte una fecha en un valor alfanumérico

SET DATEFORMAT dmy
SELECT CAST( ‘20/01/2011’ as DATETIME)…
Convierte un valor alfanumérico en una valor tipo fecha, en este caso se utiliza DATEFORMAT para indicar el formato
que estamos utilizando para indicar el valor a convertir.

SET LENGUAGE us_english
SELECT CAST( ‘01/20/2011’ as DATETIME)…
Se utiliza SET LENGUAGE para indicar la cultura del valor a convertir.

SELECT CAST( CONVERT( VARCHAR,GETDATE(),101) AS DATETIME )
Extrae la fecha corta de la fecha larga actual y convierte dicho valor en un valor tipo fecha.

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 matemáticas con estos valores.
Función

Descripción

SQL Server – Carlos Caraballo

Ejemplo
Page 4

CURRENT_TIMESTAMP

GETDATE()

DAY
MONTH
YEAR
DATEPART

Retorna la fecha completa actual. Con
este valor se retorna la fecha completa
para cada fila retornada.
Es
un
equivalente
de
CURRENT_TIMESTAMP
con
la
diferencia de que éste puede cambiar a
lo largo del resultado.
Se utiliza para extraer el día de la fecha
Extrae el mes de la fecha
Extrae el año de la fecha
Se utiliza para extraer cualquier parte
de la fecha.
hh: hora
yy: año
dd: día de la semana
wk: semana
mi: minuto
ss: segundo
dy: día del año
dw: día de la semana
qq: Quarter

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

El formato también puede indicarse en
palabra completa, por ejemplo en vez
de utilizar yy podemos decir year.
http://msdn.microsoft.com/en-us/library/ms189794.aspx

DATENAME

DATEDIFF

DATEADD

Extrae el literal de la parte extraída de
la fecha. Es decir si sacamos el mes, nos
indica el nombre del mes.
Se utiliza para restar valores fechas.
Igual que con DATEPART es importante
se debe indicar el formato en que se
quiere el resultado.
Se utiliza para sumar un valor a una
fecha. El valor a sumar se indica de
acuerdo a las constantes que se utilizan
para extraer una parte de la fecha.

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 días.
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

SQL Server – Carlos Caraballo

Page 5

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close