Tratamiento de Fechas y Horas en SQL Server
Tratamiento de Fechas y Horas en SQL Server
Introduccin.
El tratamiento de fechas en SQL Server es uno de temas que ms preguntas generan
en los foros y grupos de noticias. SQL Servertiene los tipos de
datos datetime y smalldatetime para almacenar datos de fecha y hora.
No hay tipos de datos diferentes de hora y fecha para almacenar slo horas o slo
fechas. Si slo se especifica una hora cuando se establece un valor datetime o
smalldatetime, el valor predeterminado de la fecha es el 1 de enero de 1900. Si slo se
especifica una fecha, la hora ser, de forma predeterminada, 12:00 a.m.
(medianoche), es decir, las 00:00.
Nota Importante: En SQL Server 2008 s que tenemos como novedad tipos de datos
para almacenar slo la fecha y slo la hora. Por tanto todo lo que contamos a
continuacin se puede solucionar usando los nuevos tipos de datos.
DATEADD
DATEDIFF
DATENAME
DATEPART
GETDATE
DAY
MONTH
YEAR
Select
DATEDIFF(dd, @FechaIngreso, @FechaEgreso) AS Dias,
DATEDIFF(mm, @FechaIngreso, @FechaEgreso) AS Meses,
DATEDIFF(mi, @FechaIngreso, @FechaEgreso) AS Minutos
aa, aaaa
trimestre
tt, t
mes
mm, m
da del ao
da, a
da
dd, d
semana
sm, ss
hora
hh
minuto
mi, n
segundo
ss, s
milisegundo
Ms
Continuando con las operaciones con las fechas, veamos como podemos hacer para
sumar, restar, das, minutos, meses, a una fecha, para ello utilizamos la funcin
DATEADD:
Sugerencia:
Estos ejemplos que mostramos a continuacin devolveran el mismo resultados que las
consultas anteriores, pero, si, siempre hay un pero.... hace un tiempo nuestro
compaero Fernando Guerrero me sugiri no utilizarlo pues este truco no est
soportado oficialmente por SQL Server ni por el estndar ANSI.
select convert(varchar(12), getdate()-7), 106) as 'una semana atrs'
select convert(varchar(12), getdate()-1), 106) as 'Ayer'
Ampliar informacin:
30 de agosto de 2007
8 comentarios
Aprovecho que estoy en clase de base de datos para publicar algunas funciones
de bases de datos SQL, especficamente para MS SQL Server.
Son los apuntes de lo que va del semestre en Aplicaciones de bases de datos,
pueden venir a mano como referencia, o para aprenderse alguna nueva. La
mayora tienen su respectivo ejemplo aplicado a la bd, aunque se entienden
bastante bien fuera de contexto.
El script de la base de datos lo adjunto como enlace a continuacin:
Base de datos (bd.sql) 5,22 Kb
Maysculas y minsculas:
SELECT UPPER(Nombre), LOWER(Apellido) FROM estudiantes
Eliminar espacios:
SELECT LTRIM('
SELECT RTRIM('Nanuk
Aijuna!')
')
Funcin espacio:
SET @valor = SPACE(9)
Declaracin de variables:
Formato:
DECLARE @NombreVar tipo
SET @NombreVar = Valor
Ejemplo:
DECLARE @Nombre CHAR(8)
DECLARE @Apellido CHAR(6)
DECLARE @valor CHAR(50)
DECLARE @Edad SMALLINT
SET @Edad = 41
SET @valor = 'Fernando Briano'
SET @Nombre = SUBSTRING(@valor, 1, (charindex(' ', @valor) - 1 ))
SET @Apellido = SUBSTRING(@valor, (charindex(' ', @valor) + 1), LEN(@valor))
SELECT @Nombre + ' ' + @Apellido + ' - edad: ' + CONVERT(CHAR(3), @Edad) + ' aos'
CONVERT:
CONVERT(Tipo, Campo o expresin, estilo)
Redondear valores:
SELECT ROUND(479.90, -1)
ISDATE(campo)
Devuelve 1 si el campo contiene una fecha vlida, sino devuelve 0
Valor nulo no es de tipo fecha
ISNUMERIC(campo)
Devuelve 1 si el campo contiene un valor numrico, sino devuelve 0
SELECT ISDATE(FechaIngreso) FROM estudiantes
IDENTIFICADOR UNICO:
La funcin NEWID solamente funciona para columnas que hayan sido declaradas
como UNIQUEIDENTIFIER
FUNCIONES DEL SISTEMA
Generalmente llevan @@ adelante. Para encontrarlas, en la ayuda se puede
buscar el string @@ que nos va a mostrar la mayora de las que hay.
@@ROWCOUNT
Devuelve el nmero de filas afectadas por la ltima instruccin
Queda en cero cuando hubo error o no se realiz la instruccin.
SELECT * FROM estudiantes
SELECT @@rowcount AS Columnas
UPDATE estudiantes SET FechaEgreso = '07/07/2007' WHERE Nombre='Eustakio'
IF @@ROWCOUNT = 0 PRINT 'Santos Jalapeos enchilados Batman! No ha funcionado'
@@ERROR
Devuelve 0 si no hubo error, o distinto de cero con un cdigo especfico (valo en
el manual) con el error
@@IDENTITY
Muestra el ltimo identity de la tabla. O sea, si por ejemplo hacemos una columna
con valor int que va autoincrementando, y es identidad, al seleccionar ste valor,
nos devuelve el ltimo insertado.
Ver el usuario actual con el que se est logueado:
SELECT CURRENT_USER
ESTRUCTURA IF
IF
BEGIN
-END
ELSE
BEGIN
-END
SENTENCIAs
SENTENCIAS