Date and time


Dual table

It is a table in Oracle that contains just one record and is available to all users. The DUAL table contains one column (named DUMMY) and one row (whose values is simply X). The DUAL table is provided to support on-the-fly queries.
Es una tabla de los sistemas de bases de datos Oracle que contiene un único registro y que está disponible a todos los usuarios. La tabla dual contiene una columna (llamada DUMMY) y un renglón (cuyo valor es una simple X.) Esta tabla se diseñó para proporcionar apoyo a consultas en línea.

dual_table

Problem 1
Test the SQL command in Oracle (you may use any database).
Pruebe el comando de SQL en Oracle (usted puede usar cualquier base de datos).

SQL
SELECT SYSDATE
FROM DUAL;

sysdate

Tip
The DUAL table allows you to perform date operations when you have not created any tables. i.e. you can execute a SELECT statement from the DUAL table to display the current time. Most of the time you will have access to some tables, and you can call SYSDATE using these tables. All users in an Oracle database have access to the DUAL table.
La tabla DUAL permite hacer operaciones de fechas y tiempo (un punto en el tiempo) aún cuando no se han creado las tablas de una base de datos. Por ejemplo es posible ejecutar un comando con SELECT de la tabla DUAL para obtener el tiempo del sistema. Todos los usuarios en una base de datos Oracle tienen acceso a la tabla DUAL.

Problem 2
Test the SQL command in MySQL.
Pruebe el comando de SQL en MySQL.

SQL
SELECT CURRENT_TIME();

current_time

Problem 3
Test the SQL command in MySQL.
Pruebe el comando de SQL en MySQL.

SQL
SELECT CURRENT_DATE();
SELECT CURDATE();

current_date

Problem 4
Test the SQL command in Microsoft SQL Server. Microsoft SQL Server offers the function GETDATE() to return the current date (and time).
Pruebe el comando de SQL en Microsoft SQL Server. Microsoft SQL Server ofrece la función GETDATE() para regresar la fecha (y el tiempo) actual.

SQL
SELECT GETDATE();


Problem 5
ford> Test the SQL command in Oracle.
Pruebe el comando de SQL en Oracle.

SQL
SELECT SYSDATE,
TO_CHAR(SYSDATE, 'MM-DD-YY') AS DATE_1,
TO_CHAR(SYSDATE, 'MM-DD-YYYY') AS DATE_2,
TO_CHAR(SYSDATE, 'DD-MM-YYYY') AS DATE_3,
TO_CHAR(SYSDATE, 'DD-MON-YY') AS DATE_4
FROM DUAL;

sysdate_tochar

Problem 6
ford> Test the SQL command in MySQL. Observe the percent j represent the number of day in the year.
ford> Pruebe el comando de SQL en MySQL. Observe que porcentaje j representa el número del día en el año.

SQL
SELECT name, contract_date,
DATE_FORMAT(contract_date, '%W, %M %Y') AS date1,
DATE_FORMAT(contract_date, '%D %y %a %d %m %b %j') AS date2
FROM employee;

ford_date_format

Problem 7
Test the SQL command in Oracle (you may use any database).
Pruebe el comando de SQL en Oracle (usted puede usar cualquier base de datos).

SQL
SELECT SYSDATE,
ADD_MONTHS(SYSDATE, -1) AS PAST,
ADD_MONTHS(SYSDATE, 2) AS FUTURE,
MONTHS_BETWEEN(SYSDATE, ADD_MONTHS(SYSDATE, 3)) AS DIF
FROM DUAL;

add_months

Tip
Be careful when manipulating dates. The time is stored in hours, minutes and seconds, the arithmetic operations may return unexpected values or fraction of days.
Tenga cuidado cuando manipule columnas de fecha o de tiempo, ya que al hacer operaciones entre estas se pueden obtener valores inesperados.

Tip
Do not store a date using text variables such as VARCHAR or CHAR. Always manipulate dates using DATE variables.
Nunca almacene una fecha usando variables de texto tales como VARCHAR o CHAR. Siempre manipule fechas usando variables del tipo DATE.

Problem 8
Test the SQL command in Oracle (you may use any database).
Pruebe el comando de SQL en Oracle (usted puede usar cualquier base de datos).

SQL
SELECT SYSDATE,
TO_CHAR(SYSDATE, 'MONTH') AS MONTH_,
TO_CHAR(SYSDATE, 'MON') AS MON_,
TO_CHAR(SYSDATE, 'MM') AS NUMBERS_,
TO_CHAR(SYSDATE, 'RM') AS ROMAN_
FROM DUAL;

roman

Problem 9
Test the SQL command in Oracle (you may use any database).
Pruebe el comando de SQL en Oracle (usted puede usar cualquier base de datos).

SQL
SELECT SYSDATE,
TO_CHAR(SYSDATE, 'DAY') AS DAY_,
TO_CHAR(SYSDATE, 'DDTH') AS DDTH_,
TO_CHAR(SYSDATE, 'DDSP') AS DDSP_,
TO_CHAR(SYSDATE, 'DDSPTH') AS DDSPTH_
FROM DUAL;

ddth

Problem 10
Test the SQL command in Oracle (you may use any database).
Pruebe el comando de SQL en Oracle (usted puede usar cualquier base de datos).

SQL
SELECT SYSDATE,
TO_CHAR(SYSDATE, 'HH:MI:SS AM') AS TIME_,
TO_CHAR(SYSDATE, 'HH:MI') AS HH_MI,
TO_CHAR(SYSDATE, 'HH12:MI') AS HH_12,
TO_CHAR(SYSDATE, 'HH24:MI') AS HH_24
FROM DUAL;

hhmi

Tip
In Oracle, it is possible to perform arithmetic operations with DATE values, the resulting value will be in days. MySQL provides the DATE_ADD and DATEDIFF functions to add and subtract dates, respectively. Microsoft SQL Server provides the DATEADD and DATEDIFF functions.
En Oracle es posible realizar operaciones aritméticas con atributos del tipo DATE, el valor resultante será expresado en días. MySQL ofrece las funciones DATE_ADD y DATEDIFF para sumar y restar fechas, respectivamente. En Microsoft SQL Server se usa DATEADD y DATEDIFF.

Tip
Closings (i.e., close the month) are useful because they consolidate data to get information. They allow keeping the size of the database approximately constant (and of a reasonable size). Steps:
  1. Backup (restrict database access, begin transaction)
  2. Consolidate the original data by creating new data or reports
  3. Delete the original data
  4. Commit the transaction

Los cortes (por ejemplo cerrar el mes) son útiles porque permiten consolidar los datos para obtener información. Permite mantener el tamaño de la base de datos aproximadamente constante (y dentro de un tamaño razonable). Pasos:
  1. Respaldo (limitar el acceso a la base de datos, inicio de transacción.)
  2. Consolidar los datos originales creando nuevos datos o reportes.
  3. Eliminar los datos originales
  4. Terminar o consolidar la transacción

Tip
The typical repeating periods are: daily, weekly, every two weeks, monthly, every three months, twice a year and yearly. To map these events to the database, you may consider:
  • Differentiate between an event that happens once, and an event that will be repeated
  • Review the frequency of the event
  • Review the initial point of the event
  • Analyze how the event ends
Examples:
  • Period of report preparation
  • Periods of appointment deletions (medical, dental, etc. )
  • Sales seasons
  • Data collection
  • Bank statement preparation
  • Inspection or feedback periods
  • Periods of hiring new employees

Los periodos típicos de repetición son en general: diarios, por semana, quincenales, mensuales, trimestral, semestrales y anuales. Para mapear estos eventos a la base de datos se debe considerar lo siguiente:
  • Distinguir si se trata de un evento que ocurre en un punto de tiempo y espacio o si se trata de un evento que se repite
  • Revisar cual es la frecuencia con la que se repite
  • Revisar cual es el punto de inicio o de referencia
  • Analizar si existe un punto de termino de la fase de repetición
Ejemplos:
  • Periodos de elaboración de reportes
  • Periodos de eliminación de citas (médicas, dentales o de consultoría)
  • Temporadas de ofertas
  • Censos
  • Elaboración de estados de cuentas bancarias
  • Periodos de inspección y retroalimentación
  • Periodos de contratación de personal

Tip
The LAST_DAY command of Oracle is motivated because of the regular procedures performed by human at the end of the month.
El comando LAST_DAY de Oracle está motivado por el procedimiento natural de revisar y reportar las actividades en una empresa al final del mes.

Problem 11
Test the SQL command in Oracle. As the beginning of the week is affected by the language of the database, the behavior of NEXT_DAY may different as the one shown.
Pruebe el comando de SQL en Oracle. Como el principio de la semana es afectado por el lenguaje de la base de datos, el comportamiento de NEXT_DAY puede ser diferente al mostrado debajo.

SQL
SELECT SYSDATE,
LAST_DAY(SYSDATE) AS LAST_D,
NEXT_DAY(SYSDATE, 1) AS NEXT_SUN,
NEXT_DAY(SYSDATE, 2) AS NEXT_MON,
NEXT_DAY(SYSDATE, 3) AS NEXT_TUE
FROM DUAL;

last_day

Problem 12
Test the SQL command in Oracle.
Pruebe el comando de SQL en Oracle.

SQL
SELECT SYSDATE,
GREATEST(SYSDATE, TO_DATE('01-OCT-2004', 'DD-MM-YYYY'), TO_DATE('04-MAR-1999', 'DD-MM-YYYY')) AS GREATEST,
LEAST(SYSDATE, TO_DATE('01-FEB-2000', 'DD-MM-YYYY'), TO_DATE('04-MAR-1999', 'DD-MM-YYYY')) AS EARLIEST
FROM DUAL;

greatest

TO_DATE()

It is an Oracle command that allows you to change a string to a date value. i.e. TO_DATE('23-MAY-2005') will return a value of type date. In MySQL you may use the CAST command previously used to perform this type of conversion.
Es un comando de Oracle que permite cambiar una cadena de texto a una variable del tipo de fecha. Por ejemplo, TO_DATE('23-MAY-2005') regresa una variable del tipo de fecha. En MySQL es posible cambiar a distintos tipos de datos usando el comando previamente visto CAST.

SET DATEFORMAT()

In Microsoft SQL Server, it is possible to set the date format at the moment to perform an INSERT (without affecting the database configuration) as shown below.
En Microsoft SQL Server es posible especificar el formato de las fechas en el momento del ingreso de los datos (en forma temporal sin cambiar la configuración de la base de datos) como se muestra debajo.

SQL
SET DATEFORMAT dmy
GO
DECLARE @myVar DATETIME
SET @myVar = '31/12/98'
SELECT @myVar
GO


SQL
SET DATEFORMAT ydm
GO
DECLARE @myVar DATETIME
SET @myVar = '98/31/12'
SELECT @myVar
GO


SQL
SET DATEFORMAT ymd
GO
DECLARE @myVar DATETIME
SET @myVar = '98/12/31'
SELECT @myVar
GO


DATEPART()

In Microsoft SQL Server, it is possible to extract a number representing part of a date variable, as shown in the example.
En Microsoft SQL Server es posible extraer un número que represente parte de una variable de punto en el tiempo, como se muestra en el ejemplo.

SQL
SELECT DATEPART(month, GETDATE()) AS 'My Month'
GO

microsoft_datepart

ISDATE()

In Microsoft SQL Server, it is possible to check if some text represents a valid date as shown.
En Microsoft SQL Server es posible verificar si un texto representa una fecha valida como se muestra.

SQL
DECLARE @someText VARCHAR(8)
SET @someText = '12/21/98'
SELECT ISDATE(@someText)


DATENAME()

In Microsoft SQL Server, it is possible extract the text that represents a part of a date value as shown below.
En Microsoft SQL Server es posible extraer un texto que represente parte de una variable de punto en el tiempo como se muestra debajo.

SQL
SELECT DATENAME(month, GETDATE()) AS 'My Month'

microsoft_datepart_abbrev

CONVERT and CAST

In Microsoft SQL Server, it is possible to give format to a date or money value using CONVERT and CAST, as shown below. Note that CONVERT takes an integer to specify the desired format.
En Microsoft SQL Server es posible dar formato a una fecha o un valor de dinero usando CONVERT y CAST, como se muestra debajo. Note que CONVERT toma un entero para especificar el formato deseado.

SQL
SELECT '$' + CAST(CONVERT(MONEY, balance, 1) AS VARCHAR)
FROM account;

SELECT '$' + CONVERT(VARCHAR(12), CAST(balance AS MONEY), 1)
FROM account;

SELECT CONVERT(VARCHAR, effective_date, 3)
FROM history_price_list;


micro_convert_cast_option

Problem 13
ford> Write a query to display the employees who were hired after January 1, 1980. Use the date format shown. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.
Escriba un comando SQL para mostrar los empleados que fueron contratados después del primero de Enero de 1980 como se muestra. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.

ford_1980

Problem 14
ford> Write a query to display the age of the employees by the time they were hired. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.
Escriba un comando SQL para mostrar la edad de los trabajadores en el momento en el que fueron contratados. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.

ford_hireage

Problem 15
ford> Write a query to display the age of each employee. The query shown displays the age of the employees at the time the query was executed. Your results may be different. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.
Escriba un comando SQL para mostrar la edad de los trabajadores en el momento en el que se ejecute la consulta. Sus resultados pueden ser diferentes de los mostrados. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.

ford_currage

Problem 16
ford> Write a query to display the retirement fund of each employee by the last day of 2007. The company gives seven dollars for each day the employees worked by the company. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Note that in Microsoft SQL Server you must convert to MONEY using CAST, and then convert to VARCHAR using CONVERT.
Escriba un comando SQL para mostrar el fondo de retiro de cada empleado para el último día del 2007. La compañía da siete dólares por cada día que el empleado trabajó en la compañía. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Note que en Microsoft SQL Server usted debe convertir a MONEY usando CAST, y entonces convertir a VARCHAR usando CONVERT.

ford_fund

Problem 17
ford> Write a query to display the name of the employees who will be retired by May 22 of 2014 (Retiring age is 50 years old.) Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.
Escriba un comando SQL para mostrar el nombre de los empleados que se jubilarán o se habrán jubilado para el 22 de Mayo del 2014. Suponga que la compañía retira a sus trabajadores cuando alcanzan una edad de 50 años. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.

ford_50

Effective Date

It provides an automatic method to take into account some data depending on the date that the query is executed. For instance, the prices of items in a store depend on the date. Thus, there must be for each item several records (price and effective date); however, only one record is used according to the date when the item is bought.
Esta proporciona un método automático para tomar en cuenta algunos datos dependiendo de la fecha en que se ejecuta la consulta. Por ejemplo, los precios de los artículos en una tienda dependen de la fecha. Así, debe de haber para cada artículo varios registros (precio y fecha efectiva); sin embargo, solamente un registro es usado de acuerdo con la fecha cuando se compre el artículo.

Problem 18
ford> Write an SQL query to display the position, the salary and the division (department) of Oscar Martinez. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.
Escriba un comando SQL para mostrar todos los puestos, salarios y departamentos (Divisions) de Oscar Martinez. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.

ford_oscar

Problem 19
ford> Write a query to display the position, salary and division that Oscar has or will have on the maximum value of effective date (i.e., the last row of the previous query.) Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.
Escriba un comando SQL para mostrar el puesto, salario y division que Oscar ha tenido o tendrá en el último movimiento. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.

ford_oscarlast

Problem 20
ford> Write a query to display the current position, salary and division that Oscar has. Your result may be different to the shown result. Add other transactions to the table to verify that your query works properly. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.
Escriba un comando SQL para mostrar el puesto, salario y division que Oscar tiene en el momento en que se ejecute la consulta. Su resultado puede ser diferente al mostrado. Agregue otros movimientos a Oscar para verificar que su consulta opera adecuadamente. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL.

ford_oscarcurr

© Copyright 2000-2019 Wintempla selo. All Rights Reserved. Sep 05 2019. Home