Documente Academic
Documente Profesional
Documente Cultură
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.
Tipo de datos Datetime.
Datos de fecha y hora comprendidos entre el 1 de enero de 1753 y el 31 de diciembre de 9999, con una
precisin de un trescientosavo de segundo, o 3,33 milisegundos.
SQL Server rechaza todos los valores que no puede reconocer como fechas entre 1753 y 9999.
Tipo de datos Smalldatetime.
Datos de fecha y hora desde el 1 de enero de 1900 al 6 de junio de 2079, con precisin de minutos.
Entonces si se utiliza un valor smalldatetime los segundos y milisegundos son siempre 0.
Diferencia entre Datetime y Smalldatetime.
SQL Server almacena internamente los valores de tipo de datos datetime como enteros de 4 bytes y los
valores smalldatetime como enteros de 2 bytes.
Funciones de fecha y hora (Transact-SQL)
Estas funciones escalares realizan una operacin sobre un valor de fecha y hora de entrada, y
devuelven un valor de cadena, numrico o de fecha y hora:
DATEADD
DATEDIFF
DATENAME
DATEPART
GETDATE
DAY
MONTH
YEAR
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
Otro ejemplo de DATEDIFF en donde recuperados los datos de la ultima semana partiendo de la fecha
del da:
SELECT TusDatos
FROM TuTabla
WHERE
DATEDIFF(dd, TuFecha, GetDate()) <= 7
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:
select convert(varchar(12), DATEADD(month, -1, getdate()), 106)
as 'un mes atrs'
select convert(varchar(12), DATEADD (week, -1, getdate()), 106)
as 'una semana atrs'
select convert(varchar(12), DATEADD (day, -1, getdate()), 106) as 'ayer'
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'
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:
DECLARE @Identificador UNIQUEIDENTIFIER
SET @Identificador = NEWID()
SELECT @Identificador
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