Sei sulla pagina 1di 8

datetime (Transact-SQL)

ESTE TEMA SE APLICA A: SQL Server (a partir de 2008) Azure SQL


Database Azure SQL Data Warehouse Almacenamiento de datos paralelos

Define una fecha que se combina con una hora del día con fracciones de segundos
basada en un reloj de 24 horas.

Nota

Use la tiempo, fecha, datetime2 y datetimeoffset tipos de datos para el nuevo trabajo.
Estos tipos se alinean con el estándar SQL. Son más portátiles. tiempo, datetime2 y
datetimeoffset proporcionan una mayor precisión de segundos. DateTimeOffset
proporciona compatibilidad de zona horaria para las aplicaciones implementadas
globalmente.

Descripción de datetime
Propiedad Valor
Sintaxis datetime
DECLARAR @MyDatetime fecha y hora
Uso
Crear tabla Table1 (Column1 datetime )
Formatos de literal de cadena
predeterminados
No aplicable
(se usa para el cliente de nivel
inferior)
Intervalo de fechas Del 01.01.53 hasta el 31.12.99
Intervalo de horas 00:00:00 a 23:59:59.997
Intervalo de ajuste de zona
Ninguno
horaria
AAAA es una cifra de cuatro dígitos comprendida
entre 1753 y 9999 que representa un año.

MM es una cifra de dos dígitos comprendido entre 01


y 12, que representa un mes del año especificado.

DD es cifra de dos dígitos comprendido entre 01 y 31


Intervalos de elementos dependiendo del mes, que representa un día del mes
especificado.

hh es una cifra de dos dígitos comprendida entre 00 y


23 que representa la hora.

mm es una cifra de dos dígitos comprendida entre 00


y 59 que representa los minutos.
Propiedad Valor

s es una cifra de dos dígitos comprendida entre 00 y


59 que representa los segundos.

n* es una cifra de cero a tres dígitos comprendida


entre 0 y 999 que representa las fracciones de
segundos.
Longitud en caracteres 19 posiciones como mínimo a 23 como máximo
Tamaño de almacenamiento 8 bytes
Se redondea en incrementos de 0,000, 0,003 o 0.007
Precisión
segundos
Valor predeterminado 1900-01-01 00:00:00
Gregoriano (no incluye el intervalo completo de
Calendario
años.)
Precisión de fracciones de
No
segundo definida por el usuario
Conservación y reconocimiento
No
del ajuste de zona horaria
Reconocimiento del horario de
No
verano

Formatos del literales de cadena compatibles para


datetime
Las tablas siguientes enumeran los formatos de literales de cadena admitidos para
datetime. Excepto para ODBC, datetime literales de cadena son comillas simples ('),
por ejemplo, 'string_literaL'. Si el entorno no es us_english, los literales de cadena
deben estar en el formato N 'string_literaL'.

Numérico Description
Formatos de Puede especificar datos de fecha con un mes en forma de número. Por
fecha: ejemplo, 5/20/97 representa el veinte de mayo de 1997. Cuando use
un formato numérico de fecha, especifique el mes, el día y el año en
[0]4/15/[19]96 - una cadena con barras diagonales (/), guiones (-) o puntos (.) como
- (mda) separadores. Esta cadena debe aparecer de la forma siguiente:

[0]4-15-[19]96 - número separador número separador número [time] [time]


- (mda)

[0]4.15.[19]96 -
- (mda) Cuando el idioma está establecido en us_english, el orden
predeterminado de la fecha es mdy. Puede cambiar el orden de fecha
[0]4/[19]96/15 - mediante el SET DATEFORMAT instrucción.
- (mad)
La configuración de SET DATEFORMAT determina cómo se
Numérico Description
15/[0]4/[19]96 - interpretan los valores de fecha. Si el orden no coincide con esta
- (dma) configuración, los valores no se interpretarán como fechas porque se
encuentran fuera del intervalo, o bien se interpretarán
15/[19]96/[0]4 - incorrectamente. Por ejemplo, 12/10/08 se puede interpretar de seis
- (dam) formas distintas, en función de la configuración de DATEFORMAT.
Un año en cuatro partes se interpreta como el año.
[19]96/15/[0]4 -
- (adm)

[19]96/[0]4/15 -
- (amd)

Formatos de
hora:

14:30

14:30[:20:999]

14:30[:20.9]

4am

4 PM
Orden
Description
alfabético
Abr[il] [15][,] Puede especificar los datos de la fecha con un mes especificado como
1996 el nombre completo del mes. Por ejemplo, abril o la abreviatura del
mes Abr especificada en el idioma actual; las comas son opcionales y
Abr[il] 15[,] se omite el uso de mayúsculas.
[19]96
Éstas son algunas directrices para utilizar los formatos alfabéticos de
Abr[il] 1996 fecha:
[15]
(1) incluya los datos de fecha y hora entre comillas simples ('). Para
[15] Abr[il][,] los idiomas distintos de inglés, utilice N'
1996
(2) los caracteres incluidos entre corchetes son opcionales.
15
Abr[il][,][19]96 (3) si especifica solamente los dos últimos dígitos del año, los valores
inferiores a los dos últimos dígitos del valor de la configurar two digit
15 [19]96 year cutoff Server Configuration Option opción de configuración que
abr[il] se encuentran en el mismo siglo que el año límite . Valores mayores
que o iguales que el valor de esta opción pertenecen al siglo anterior
[15] 1996 al año límite. Por ejemplo, si límite de año de dos dígitos es 2050
abr[il] (valor predeterminado), 25 se interpreta como 2025 y 50 se interpreta
como 1950. Para evitar ambigüedades, use años de cuatro dígitos.
1996 ABR[IL]
Orden
Description
alfabético
[15] (4) si falta el día, se proporciona el primer día del mes.

1996 [15]
ABR[IL]
El parámetro de sesión SET DATEFORMAT no se aplica cuando se
especifica el mes de forma alfabética.
ISO 8601 Description
Ejemplos:

(1) 2004-05-23T14:25:10

(2) 2004-05-23T14:25:10.487

Para utilizar el formato ISO 8601, debe especificar todos los


AAAA-MM- elementos del formato. Esto también incluye el T, los dos
DDThh:mm:ss[.mmm] puntos (:) y el punto (.) que se muestran en el formato.

AAAMMDD[ Los corchetes indican que el componente de fracción de


hh:mm:ss[.mmm]] segundo es opcional. El componente de hora se especifica en
el formato de 24 horas.

La T indica el inicio de la parte de hora la datetime valor.

La ventaja de utilizar el formato ISO 8601 es que se trata de


un estándar internacional con una especificación que evita
ambigüedades. Además, este formato no afecta a los
parámetros SET DATEFORMAT o SET LANGUAGE
configuración.
Sin separación Description
AAAAMMDD hh:mm:ss[.mmm]
ODBC Description
La API de ODBC define secuencias de escape para representar
valores de fecha y de hora que ODBC llama datos de marca de
tiempo. Este formato de marca de tiempo ODBC también es
{ ts '1998-05-02 compatible con la definición del lenguaje OLE DB (DBGUID-SQL)
01:23:56.123' } compatible con la Microsoft proveedor OLE DB para SQL Server.
Las aplicaciones que usan las API basadas en ODBC, OLE DB y
{ d '1990-10-02' ADO pueden usar este formato de marca de tiempo de ODBC para
} representar fechas y horas.

{ t '13:33:41' } Secuencias de escape de marca de tiempo ODBC de tienen el


formato: { literal_type 'constant_value'}:
ODBC Description

- literal_type especifica el tipo de la secuencia de escape. Las marcas


de tiempo tienen tres literal_type especificadores:
(1) d. = solo fecha
(2) t = solo hora
(3) ts = marca de tiempo (hora + fecha)

-'constant_value' es el valor de la secuencia de escape.


constant_value debe seguir estos formatos para cada literal_type.
d.: aaaa-mm-dd
t: hh [.fff]
TS: aaaa-mm-dd hh [.fff]

Redondeo de precisión de las fracciones de segundo de


datetime
fecha y hora valores se redondean con incrementos de.000,.003 o.007 segundos, tal
como se muestra en la tabla siguiente.

Valor especificado por el usuario Valor almacenado por el sistema


01/01/98 23:59:59.999 1998-01-02 00:00:00.000
01/01/98 23:59:59.995

01/01/98 23:59:59.996
1998-01-01 23:59:59.997
01/01/98 23:59:59.997

01/01/98 23:59:59.998
01/01/98 23:59:59.992

01/01/98 23:59:59.993 1998-01-01 23:59:59.993

01/01/98 23:59:59.994
01/01/98 23:59:59.990
1998-01-01 23:59:59.990
01/01/98 23:59:59.991

Compatibilidad con ANSI e ISO 8601


fecha y hora no es ANSI o ISO 8601 compatible.

Convertir datos de fecha y hora


Cuando se convierte a los tipos de datos de fecha y hora, SQL Server rechaza todos los
valores que no reconoce como fechas u horas. Para obtener información acerca de cómo
utilizar las funciones CAST y CONVERT con datos de fecha y hora, vea CAST y
CONVERT ( Transact-SQL ) .

Convertir otros tipos de fecha y hora para el tipo de datos de fecha y hora

Esta sección describe lo que ocurre cuando los otros tipos de datos de fecha y hora se
convierten a la datetime tipo de datos.

Cuando la conversión es de fecha, se copian el año, mes y día. El componente de hora


se establece en 00:00:00.000. En el código siguiente se muestran los resultados de
convertir un valor date en un valor datetime.

SQL
DECLARE @date date = '12-21-16';
DECLARE @datetime datetime = @date;

SELECT @datetime AS '@datetime', @date AS '@date';

--Result
--@datetime @date
------------------------- ----------
--2016-12-21 00:00:00.000 2016-12-21

Cuando la conversión es de Time (n), se copia el componente de hora, y el componente


de fecha se establece en ' 1900-01-01'. Cuando la precisión fraccionaria de los Time (n)
valor es superior a tres dígitos, el valor se truncará para ajustarse. En el siguiente
ejemplo se muestran los resultados de convertir un valor time(4) en un valor
datetime.

SQL
DECLARE @time time(4) = '12:10:05.1237';
DECLARE @datetime datetime = @time;

SELECT @datetime AS '@datetime', @time AS '@time';

--Result
--@datetime @time
------------------------- -------------
--1900-01-01 12:10:05.123 12:10:05.1237

Cuando la conversión es de smalldatetime, se copian las horas y minutos. Los


segundos y las fracciones de segundo se establecen en 0. En el código siguiente se
muestran los resultados de convertir un valor smalldatetime en un valor datetime.

SQL
DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';
DECLARE @datetime datetime = @smalldatetime;

SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';

--Result
--@datetime @smalldatetime
------------------------- -----------------------
--2016-12-01 12:32:00.000 2016-12-01 12:32:00

Cuando la conversión es de DateTimeOffset (n), se copian los componentes de fecha y


hora. Se trunca la zona horaria. Cuando la precisión fraccionaria de los DateTimeOffset
(n) valor es superior a tres dígitos, el valor se truncará. En el siguiente ejemplo se
muestran los resultados de convertir un valor datetimeoffset(4) en un valor
datetime.

SQL
DECLARE @datetimeoffset datetimeoffset(4) = '1968-10-23 12:45:37.1234
+10:0';
DECLARE @datetime datetime = @datetimeoffset;

SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';

--Result
--@datetime @datetimeoffset
------------------------- ------------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +01:0

Cuando la conversión es de datetime2, se copian a la fecha y hora. Cuando la precisión


fraccionaria de los datetime2 valor es superior a tres dígitos, el valor se truncará. En el
siguiente ejemplo se muestran los resultados de convertir un valor datetime2(4) en un
valor datetime.

SQL
DECLARE @datetime2 datetime2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime datetime = @datetime2;

SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';

--Result
--@datetime @datetime2
------------------------- ------------------------
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237

Ejemplos
En el ejemplo siguiente se compara los resultados de convertir una cadena a cada uno de
ellos fecha y tiempo tipo de datos.

SQL
SELECT
CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'
,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS
'smalldatetime'
,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'
,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS
'datetime2'
,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7))
AS
'datetimeoffset';

El conjunto de resultados es el siguiente.


Tipo de datos Salida
time 12:35:29. 1234567
date 2007-05-08
smalldatetime 2007-05-08 12:35:00
datetime 2007-05-08 12:35:29.123
datetime2 2007-05-08 12:35:29. 1234567
datetimeoffset 2007-05-08 12:35:29.1234567 +12:15

Potrebbero piacerti anche