SQL Server Intermedio
SQL Server Intermedio
SQL Server Intermedio
SQL SERVER
INTERMEDIO
Instructor: Ing. Gerardo Valdez Medina
TABLA CONTENIDO
MODULO 2: SUBCONSULTAS
• Definición de Subconsulta
• Tipos de Subconsultas o Subconsultas de una sola fila
o Subconsultas de múltiples filas
o ROLLBACK y SAVE
2
MODULO 5: TRIGGERS Y PROCEDIMIENTOS
• Creación de TRIGGERS
• Restricciones o AFTER, INSTEAD OF TRIGGERS o INSERT, DELETE, UPDATE TRIGGER
• Definición de Procedimiento Almacenado
• Características y ventajas de los procedimientos
• Tipos de procedimientos
• Creación y llamadas a procedimientos
• Modificación y eliminación de procedimientos
• Procedimientos con parámetros
3
MÓDULO 1: RELACIONANDO DATOS CON MULTIPLES TABLAS
Las vinculaciones entre tablas se realizan mediante la cláusula INNER que combina registros de dos tablas
siempre que haya concordancia de valores en un campo común.
INNER JOIN
Se puede utilizar una operación INNER JOIN en cualquier cláusula FROM. Esto crea una combinación por
equivalencia, conocida también como unión interna. Las combinaciones equivalentes son las más comunes;
éstas combinan los registros de dos tablas siempre que haya concordancia de valores en un campo común
a ambas tablas.
Su sintaxis es:
SELECT campos FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 comp tabla2.campo2
Tabla1 y tabla2 son los nombres de las tablas desde las que se combinan los registros. Campo1 y campo2
Son los nombres de los campos que se combinan. Si no son numéricos, los campos deben ser del mismo
tipo de datos y contener el mismo tipo de datos, pero no es necesario que posean el mismo nombre. Comp
es cualquier operador de comparación relacional: =, <,<>, <=, =>, ó >.
En nuestra base de datos de clínica, supongamos que necesitamos unir las tablas de paciente y atención.
Para ello realizaremos la siguiente consulta:
4
OUTER JOIN
Una operación outer join arroja todas las filas coincidentes y alguna o todas las filas no coincidentes,
dependiendo del tipo de outer join que se cree. SQL soporta tres tipos de outer joins:
• Left Arroja todas las filas coincidentes y todas las filas no coincidentes de la tabla de la izquierda (la
tabla a la izquierda de la palabra clave JOIN).
• Right Arroja todas las filas coincidentes y todas las filas no coincidentes de la tabla de la derecha (la
tabla a la derecha de la palabra clave JOIN).
• Full Arroja todas las filas coincidentes y todas las filas no coincidentes de ambas tablas.
Una operación outer join sigue la misma sintaxis que una operación inner join, sólo que en lugar de utilizar
las palabras clave INNER JOIN (o solamente la palabra clave JOIN), se aplica LEFT OUTER JOIN, RIGHT OUTER
JOIN o FULL OUTER JOIN. Observe que la palabra clave OUTER es opcional. Por ejemplo, se puede especificar
LEFT JOIN en lugar de LEFT OUTER JOIN.
5
CROSS JOIN
SQL soporta otro tipo de operación llamada cross join. Esta operación es prácticamente idéntica a la
operación join separada por comas. La única diferencia es que, en lugar de separar los nombres de columna
con una coma, se utilizan las palabras clave CROSS JOIN. Por ejemplo, tomemos una instrucción que se
utilizó anteriormente y modifiquémosla reemplazándola con las palabras clave CROSS JOIN:
UNION.
La cláusula UNION permite unir dos o más conjuntos de resultados en uno detrás del otro como si se tratase
de una única tabla. De este modo podemos obtener los registros de más de una tabla "unidos".
• Las consultas por unir deben tener el mismo número campos, y además los campos deben ser del
mismo tipo.
• Sólo puede haber una única clausula ORDER BY al final de la sentencia SELECT.
6
MÓDULO 2: SUBCONSULTAS
Las subconsultas, al igual que las operaciones join, proporcionan una forma de acceder a datos en múltiples
tablas con una sola consulta. Una subconsulta puede agregarse a una instrucción SELECT, INSERT, UPDATE
o DELETE para permitir a esa instrucción utilizar los resultados de la consulta arrojados por la subconsulta.
La subconsulta es esencialmente una instrucción SELECT incrustada que actúa como una puerta de entrada
a los datos en una segunda tabla. Los datos arrojados por la subconsulta se utilizan como la instrucción
primaria para cumplir cualquier condición que haya sido definida en la instrucción. En este capítulo se
discutirá cómo se utilizan las subconsultas en diferentes instrucciones, particularmente en instrucciones
SELECT, y se proporcionarán ejemplos que demuestren cómo crear subconsultas y qué tipo de resultados
de consulta esperar.
Se pueden dividir las subconsultas de una cláusula WHERE en dos categorías generales: aquellas que pueden
arrojar múltiples filas y aquellas que pueden arrojar solamente un valor. En esta sección se analizará la
primera de estas categorías. En la siguiente sección, “Crear subconsultas que arrojan un solo valor”, se
analizará la segunda categoría. Mientras se expande cada tema, sin duda usted reconocerá los formatos de
instrucción desde la discusión de los predicados. A pesar de que esta información pudiera parecer un poco
repetitiva (es por eso que se tocará de manera breve), se presenta aquí no solamente para proporcionar un
repaso cohesivo de las subconsultas, sino también para proporcionar una perspectiva diferente. En otras
palabras, en lugar de mirar las subconsultas a través de la perspectiva del predicado, miraremos
directamente a la subconsulta en sí.
UTILIZANDO IN
El predicado IN compara valores de una columna en la tabla primaria con valores arrojados por la
subconsulta. Si el valor de la columna se encuentra en los resultados de la subconsulta, esa fila (de la tabla
primaria) se arroja en los resultados de la consulta de la instrucción SELECT. Como ejemplo:
7
Como se ve en el ejemplo anterior, se extraen las atenciones realizadas a un paciente en específico,
buscando por el nombre (dato que por supuesto, no se encuentra en la tabla atenciones.) EXISTS
En algunas circunstancias se puede requerir que la subconsulta arroje solamente un valor de verdadero o
falso. El contenido de los datos en sí mismo no es importante, en términos de cumplir con la condición de
un predicado. En este caso, se puede utilizar un predicado EXISTS para definir la subconsulta. El predicado
EXISTS se evalúa como verdadero si una o más filas son arrojadas por la subconsulta; de otra manera, se
evalúa como falso. Para que un predicado EXISTS sea de utilidad, la subconsulta asociada deberá incluir una
condición de búsqueda que haga coincidir los valores en las dos tablas que están siendo vinculadas a través
de la subconsulta.
En la instrucción, cada fila arrojada por la instrucción SELECT principal se evalúa con la subconsulta. Si la
condición especificada en el predicado EXISTS es verdadera, la fila se incluye en los resultados de la consulta;
de otra manera, la fila es omitida. Cuando la condición especificada es verdadera, eso significa que al menos
una fila ha sido arrojada por la subconsulta.
(‘12/05/2016',( SELECT id_paciente FROM paciente WHERE nombre = 'Gabriela Peñaloza' ),2 );
En la sentencia anterior, se utilizó una subconsulta para extraer el identificador de un nombre de paciente
en específico y de esa manera, poder insertarlo en la tabla Atención.
8
MÓDULO 3: MODIFICANDO DATOS.
INSERT
la instrucción INSERT permite agregar datos a las diferentes tablas en una base de datos. Se presenta la
sintaxis básica en esta. La sintaxis de una instrucción INSERT básica es relativamente sencilla:
En la sintaxis, sólo son obligatorias la primera y la última línea. La segunda línea es opcional. Tanto la primera
como la segunda línea son parte de la cláusula INSERT INTO. En esta cláusula se debe identificar el nombre
de la tabla (o vista) en la cual se agregarán los datos. El nombre de la tabla sigue a las palabras clave INSERT
INTO. Entonces el usuario tiene la opción de identificar los nombres de la columna en la tabla que recibirán
los datos. Éste es el propósito de la segunda línea en la sintaxis. Es posible especificar una o más columnas,
y todas ellas deberán estar dentro de paréntesis. Si se especifican más columnas, éstas deberán estar
separadas por comas.
• En la tercera línea de la sintaxis, que se refiere a la cláusula VALUES, se deben especificar uno o más
valores que serán ingresados en la tabla. La lista de valores deberá estar encerrada en paréntesis y,
si se especifica más de uno, deberán estar separados utilizando comas. Asimismo, los valores deben
cumplir los siguientes requisitos:
• Si los nombres de columna no se especifican en la cláusula INSERT INTO, entonces deberá haber un
valor por cada columna en la tabla y los valores deberán estar en el mismo orden en el que están
definidos en la tabla.
• Si los nombres de columna se especifican en la cláusula INSERT INTO, entonces deberá haber
exactamente un valor por cada columna especificada y esos valores deberán estar en el mismo
orden en el que están definidos en la cláusula INSERT INTO.
Sin embargo, los nombres y valores de columna no tienen que estar en el mismo orden que las columnas
en la definición de la tabla. Se debe proporcionar un valor por cada columna en la tabla excepto para las
columnas que permiten valores nulos o que tienen un valor definido por defecto. Cada valor con un carácter
del tipo de datos de cadena debe estar encerrado en comillas sencillas. Se puede utilizar la palabra clave
NULL (o null) como el valor de los datos en la cláusula VALUES para asignar un valor nulo a cualquier columna
que permita valores nulos.
9
Si se intenta ejecutar una instrucción INSERT omitiendo una columna que no permita valores nulos y que
no tenga un valor por defecto definido, se arrojará como resultado un error. Cuando se inserta una nueva
fila, el RDBMS debe obtener un valor para cada columna desde algún lado, por lo que si no se permiten los
valores nulos, entonces el valor debe venir ya sea de un valor por defecto (si está definido) o de la cláusula
VALUES de la instrucción INSERT.
UPDATE
Como su nombre lo indica, la instrucción UPDATE permite actualizar los datos en una base de datos SQL.
Con la instrucción UPDATE se pueden modificar datos en una o más filas para una o más columnas. La
sintaxis para la instrucción UPDATE se puede mostrar de la manera siguiente:
Como se puede ver, la cláusula UPDATE y la cláusula SET son obligatorias, mientras que la cláusula WHERE
es opcional. En la cláusula UPDATE se debe especificar el nombre de la tabla (o vista) que se está
actualizando. En la cláusula SET se debe especificar una o más expresiones de cláusula.
10
Se debe especificar una condición o conjunto de condiciones que actúa como un filtro para las filas que se
están actualizando. Solamente las filas que cumplen con estas condiciones son actualizadas. En otras
palabras, solamente las filas cuyo resultado es verdadero son actualizadas.
Ejemplo:
DELETE
Contiene solamente dos cláusulas, y una sola de ellas es obligatoria. La siguiente sintaxis muestra qué tan
básica es la instrucción DELETE:
Como se puede ver, la cláusula DELETE FROM requiere que se especifique el nombre de la tabla (o vista) de
la cual se quieren eliminar filas. La cláusula WHERE, la cual es similar a la cláusula WHERE en una instrucción
SELECT y en una instrucción UPDATE, requiere que se especifique una condición de búsqueda. Si no se
incluye una cláusula WHERE en la instrucción DELETE, todas las filas serán eliminadas de la tabla
especificada. Es importante comprender que la instrucción DELETE no elimina la tabla en sí, sino solamente
filas en la table.
Ejemplo:
11
TRUNCATE
Para realizar un borrado completo de tabla debemos considerar la posibilidad de utilizar la sentencia
TRUNCATE, mucho más rápida que DELETE. Es decir, todos los registros que se encuentren en la tabla serán
eliminados.
12
MÓDULO 4: PROGRAMACION SQL
PROCEDIMIENTO Y FUNCIONES.
La forma más sencilla de distinguir entre los procedimientos y funciones invocados por SQL es considerar
un procedimiento como un conjunto de una o más instrucciones SQL almacenadas, similar a cómo una vista
almacena una instrucción SELECT, y considerar una función como un tipo de operación que arroja un valor,
similar a las funciones SET como SUM o AVG.
CREATE PROCEDURE
La primera sintaxis que veremos es aquella que sirve para crear un procedimiento. En su nivel más básico,
la instrucción CREATE PROCEDURE luce de la siguiente manera:
Como se puede ver, debe proporcionarse un nombre para el procedimiento (en la cláusula CREATE
PROCEDURE) seguido por cero o más declaraciones de parámetro, que van encerradas en paréntesis. Se
deben proporcionar los paréntesis incluso si no se define ninguna declaración. Después de las declaraciones
de parámetro se tiene la opción de definir una o más características de la rutina. Por ejemplo, se puede
especificar si una rutina es SQL o una escrita en otro lenguaje, por ejemplo, C o Java.
CREATE FUNCTION
Ahora demos un vistazo a la instrucción utilizada para crear una función invocada por SQL. Como se puede
ver en la siguiente sintaxis, una función contiene unos cuantos elementos más que un procedimiento:
VARIABLES LOCALES
Además de permitir pasar los parámetros a un procedimiento, SQL también proporciona una forma para
crear variables locales en la definición del procedimiento que puedan ser utilizadas dentro del cuerpo del
procedimiento. Una variable local puede ser considerada como un tipo de marcador de posición que
mantiene un valor en la memoria durante la ejecución de las instrucciones en el cuerpo de la rutina. Una
vez que las instrucciones han sido ejecutadas, la variable deja de existir.
Sintaxis:
13
Siguiendo este mismo ejemplo, vamos a crear la variable resultado para una posterior operación.
Una vez que se ha declarado la variable, debe asignársele un valor antes de que pueda ser referenciada.
(Sin embargo, algunas implementaciones asignan automáticamente un valor nulo a las variables en el
momento de ser definidas.) Se puede utilizar la instrucción SET para asignar un valor a una variable
utilizando la siguiente sintaxis:
) y ambos son CD de New Age. En una definición de procedimiento no se está limitado solamente a una
variable. Se puede crear una instrucción DECLARE para cada variable que se quiera incluir. También es
posible incluir múltiples variables en una instrucción, si esas variables están asignadas al mismo tipo de
datos.
14
INSTRUCCIONES CONDICIONALES.
IF
La instrucción utiliza las palabras clave IF, THEN y ELSE para establecer las condiciones y definir las
acciones a tomar: si (if ) se cumple la condición, entonces (then) se ejecuta la instrucción SQL, o se toma
alguna otra (else) acción.
WHILE la cláusula WHILE finaliza la repetición automáticamente cuando la condición se evalúa como
falsa.
Nótese que muchas implementaciones, incluyendo Oracle y SQL Server, utilizan un bloque BEGIN en lugar
de la palabra clave DO para encerrar las instrucciones que se van a repetir por el bucle de repetición WHILE.
Un punto más en el que hay que poner atención es dónde se evalúa la condición en la lógica de repetición.
Algunas implementaciones evalúan la condición al principio de la repetición. Otras la evalúan al final de la
repetición, lo que significa que las instrucciones en la repetición siempre se ejecutarán por lo menos una
vez, incluso si la condición se evalúa como falsa la primera vez que se inicia la repetición.
EXECUTE
Una vez que se ha preparado la instrucción, puede entonces utilizarse la función Execute( ) para ejecutar la
instrucción. La función Execute( ) solamente ocupa un argumento (el indicador de instrucción que contiene
la instrucción preparada.
EXECUTE mayoría_edad
15
CASE
Una expresión de valor CASE permite determinar una serie de condiciones que modifican valores específicos
arrojados por la instrucción SQL. Se puede cambiar la forma en que un valor está representado o se calcula
un nuevo valor. Cada valor es modificado de acuerdo con la condición especificada dentro de la expresión
CASE. Una expresión de valor incluye la palabra clave CASE y una lista de condiciones. La última condición
proporciona una condición por defecto si ninguna de las condiciones anteriores ha sido cumplida. Entonces
la expresión de valor se cierra utilizando la palabra clave END.
16
MANEJO DE ERRORES
Cuando se incrusten instrucciones SQL en el lenguaje host, se deberá proporcionar una forma de tomar
acciones específicas si se recibe un mensaje de error o de advertencia cuando se intenta acceder a los datos.
SQL proporciona un método relativamente sencillo que puede utilizarse para monitorear los errores y
advertencias y tomar acciones dependiendo de los resultados de ese monitoreo.
ROLLBACK
A pesar de que el objetivo de cualquier transacción es completar los cambios hechos por las instrucciones
en esa transacción, no hay duda de que existirán ocasiones cuando se quiera reinvertir esos cambios. Para
poder controlar estas reinversiones, se debe utilizar una instrucción ROLLBACK para deshacer los cambios
y eliminar la transacción, o para regresar los cambios a un punto de recuperación específico. La siguiente
sintaxis muestra los diferentes elementos que pueden ser incluidos en una instrucción ROLLBACK:
ROLLBACK [WORK] [ AND [NO] CHAIN ] [ TO SAVEPOINT <nombre del punto de recuperación> ]
MÓDULO 5: TRIGGERS
Existe un número de similitudes entre SGDB (por ejemplo, el uso de la instrucción CREATE TRIGGER para
crear un activador), y las implementaciones de activadores en varios productos comparten algunas
características básicas, particularmente aquellas que hacen posible dispararlo automáticamente para
realizar una acción secundaria relacionada con la acción primaria que invocó el activador.
Un Triggers es creado para generar una instrucción que se gatilla, cuando es invocada una acción primaria.
Por ejemplo, supongamos que no se permite la eliminación de algún usuario previa autorización, entonces
se genera un trigger que desencadenará un mensaje de advertencia indicando que no pueden ser
borrados los datos en la tabla en específico y evitará dicha acción.
Si sintaxis sería:
Tabla | vista es el nombre de la tabla o vista en la que se ejecuta el desencadenador. Sólo se puede hacer
referencia a una vista mediante un desencadenador INSTEAD OF. No es posible definir desencadenadores
DML en tablas temporales locales o globales.
DELETE INSERT UPDATE Especifica las instrucciones de modificación de datos que activan el
desencadenador cuando se intenta ejecutarlas en esta tabla o vista. Se debe especificar al menos una
opción. En la definición del desencadenador se permite cualquier combinación de estas opciones, en
cualquier orden.
17
A pesar de que el estándar SQL no soporta ninguna clase de instrucción que permite alterar un activador,
sí soporta una forma de eliminar un activador, que se logra utilizando la instrucción DROP TRIGGER. Como
se puede ver en la siguiente sintaxis, esta instrucción es muy básica:
AFTER indica que el desencadenador sólo se activa cuando todas las operaciones especificadas en la
instrucción SQL desencadenadora se han ejecutado correctamente. Además, todas las acciones
18
referenciales en cascada y las comprobaciones de restricciones deben ser correctas para que este
desencadenador se ejecute. BEFORE indica que las sentencias serán ejecutadas después.
INSTEAD OF indica que se ejecuta el desencadenador en vez de la instrucción SQL desencadenadora, por lo
que se suplantan las acciones de las instrucciones desencadenadoras.
Como máximo, se puede definir un desencadenador INSTEAD OF por cada instrucción INSERT, UPDATE o
DELETE en cada tabla o vista. No obstante, en las vistas es posible definir otras vistas que tengan su propio
desencadenador INSTEAD OF.
La mayoría de los lenguajes de programación de aplicación soportan el uso de cursores para recuperar datos
de una base de datos SQL. El lenguaje del cursor está incrustado en el código de programación de una forma
muy parecida a la que se incrustaría cualquier instrucción SQL. Cuando se utiliza un cursor en un lenguaje
de programación, primero se debe declarar el cursor (similar a como se declararía una variable) y luego
utilizar el nombre de la instrucción (el nombre que se le asignó al cursor) en otras instrucciones SQL
incrustadas para abrir el cursor, recuperar filas individuales a través del cursor y cerrar el cursor.
Para poder trabajar con Cursores debemos realizar los siguientes pasos:
/* :*/ ahora declaramos las variables con las que vamos a recorrer el cursor
@ apellidos varchar(25)
/* Se mueve al siguiente registro dentro del cursor y los asignamos a las variables antes
declaradas*/
19
fetch next from cursor prueba _
/* , 0 Retorna el estatus del último registro recorrido en el cursor cuando es igual a encontró
@@ _ fetch status = 0
begin
print' : ' El Nombre de la persona es + @ + nombres ' : ' y sus apellidos + apellidos /*
@ , nombres apellidos
end
/* , Cuando concluimos con el recorrido del cursor este debe ser cerrado y luego destruído
Los cursores son muy eficientes para utilizarlos en Job de las bases de datos que realiza alguna operación
donde necesitamos modificar alguna información dentro de un bucle. Los cursores demandan mucho del
servidor de base datos por lo tanto no es recomendable abusar del mismo ya que necesitan bastantes
recursos para su ejecución.
20
MÓDULO 7: CONVERSION DE DATOS
Convierten una expresión de un tipo de datos en otro de forma explícita. CAST y CONVERT proporcionan
funciones similares. Su sintaxis para ambas consultas se muestra a continuación:
expresión Es cualquier expresión válida. tipo_dato Es el tipo de datos de destino proporcionado por el
sistema. Incluye xml, bigint y sql_variant. No se pueden utilizar tipos de datos de alias.
Longitud es un parámetro opcional de los tipos de datos nchar, nvarchar, char, varchar, binary o varbinary.
Para CONVERT, si no se ha especificado el parámetro longitud, el valor predeterminado es 30 caracteres.
Es el estilo del formato de fecha usado para convertir datos de tipo datetime o smalldatetime en datos de
caracteres (con tipo de datos nchar, nvarchar, char, varchar, nchar o nvarchar), o para convertir datos de
caracteres de formatos de fecha y hora conocidos en datos de tipo datetime o smalldatetime; o bien, el
formato de cadena usado para convertir datos de tipo float, real, money o smallmoney en datos de
caracteres (con tipo de datos nchar, nvarchar, char, varchar, nchar o nvarchar). Cuando estilo es NULL, el
resultado devuelto también es NULL.
0 (predeterminado) Sin separadores de millar cada tres dígitos a la izquierda del separador decimal y
dos dígitos a la derecha del separador decimal; por ejemplo, 4235,98.
1 Separadores de millar cada tres dígitos a la izquierda del separador decimal y dos dígitos a la
derecha del separador decimal; por ejemplo, 3.510,92.
2 Sin separadores de millar cada tres dígitos a la izquierda del separador decimal y cuatro dígitos a la
derecha del separador decimal; por ejemplo, 4235,9819.
Ejemplo:
21
PARSE Y TRY_PARSE
La función PARSE permite convertir una cadena de texto a un valor numérico o de fecha/hora, y produce
un error en caso de no poder realizar la conversión. Es importante tener en cuenta, que la función PARSE
utiliza el motor (CLR) del NET Framework, ya que por ejemplo, mientras que la cadena 20130101 se puede
convertir a fecha con CAST y CONVERT, esta misma cadena no podrá ser convertida a fecha con PARSE.
Además, la función PARSE también permite realizar la conversión teniendo en cuenta la información de un
idioma especificado como parámetro.
Para complementar a la función PARSE, desde SQL Server 2012 también tenemos disponible a la función
TRY_PARSE, que es equivalente a PARSE, excepto que devuelve NULL (en lugar de generar una excepción)
cuando no puede realizar la conversión.
FORMAT
La función Format aplica desde SQL Server 2012 en adelante. Devuelve un valor con el formato previamente
indicado. Se puede utilizar para definir el formato de una fecha y hora o para retornar un numero como
varchar en un formato específico.
Su sintaxis es:
El parámetro “valor” es el valor que quieres formatear, debe ser un dato compatible con la función. El
formato es precisamente como queremos nuestro resultado (ej. “C”, “D”, “g”, “dd/MM/yyyy”).
A continuación, se muestra un ejemplo extrayendo los datos de fecha de atención de la tabla atención. Se
puede apreciar que la fecha se encuentra en formato año-mes-día.
Veremos cómo podríamos cambiar el formato, dejando la fecha día, mes, año.
22
En variable fecha, estamos guardando la fecha de atención para id_atencion 1. Se utiliza esta variable para
utilizarla en la sentencia format.
MANEJO DE FECHAS
Las funciones de valor de fecha y hora proporcionan información acerca de la fecha y la hora actuales.
Cada función arroja un valor basado en la fecha u hora (o ambos) tal como están configurados en el
sistema operativo. getdate(): retorna la fecha y hora actuales. Ejemplo:
select getdate();
datepart(): 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).
Su sintaxis es:
23
Select datepart(partedefecha,fecha)
Ejemplos:
Datename: 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());
dateadd: 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).
Su sintaxis es:
24
Select dateadd(partedelafecha,numero,fecha)
Datediff: Calcula el intervalo de tiempo (según el primer argumento) entre las 2 fechas. El resultado es un
valor entero que corresponde a fecha2-fecha1. Los valores de "partedelafecha) pueden ser los mismos que
se especificaron anteriormente.
Ejemplos:
25