time (Transact-SQL) Defines a time of a day. The time is without time zone awareness and is based on a 24-hour clock.

time Description
Property | Value |
|---|
Syntax | time [ (fractional second precision) ] | Usage | DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) ) | fractional seconds precision | Specifies the number of digits for the fractional part of the seconds. This can be an integer from 0 to 7. The default fractional precision is 7 (100ns). | Default string literal format (used for down-level client) | hh:mm:ss[. nnnnnnn] For more information, see the "Backward Compatibility for Down-level Clients" section that follows.. | Range | 00:00:00.0000000 through 23:59:59.9999999 | Element ranges | hh is two digits, ranging from 0 to 23, that represent the hour. mm is two digits, ranging from 0 to 59, that represent the minute. ss is two digits, ranging from 0 to 59, that represent the second. n* is zero to seven digits, ranging from 0 to 9999999, that represent the fractional seconds. | Character length | 8 positions minimum (hh:mm:ss) to 16 maximum (hh:mm:ss. nnnnnnn) | Precision, scale (user specifies scale only) | Specified scaleResult (precision, scale)Column length (bytes)Fractional seconds precision time(16,7)57 time(0)(8,0)30-2 time(1)(10,1)30-2 time(2)(11,2)30-2 time(3)(12,3)43-4 time(4)(13,4)43-4 time(5)(14,5)55-7 time(6)(15,6)55-7 time(7)(16,7)55-7 | Storage size | 5 bytes, fixed, is the default with the default of 100ns fractional second precision. | Accuracy | 100 nanoseconds | Default value | 00:00:00 This value is used for the appended time part for implicit conversion from date to datetime2 or datetimeoffset. | User-defined fractional second precision | Yes | Time zone offset aware and preservation | No | Daylight saving aware | No |

Supported String Literal Formats for time
The following table shows the valid string literal formats for the time data type. SQL Server | Description |
|---|
hh:mm[:ss][:fractional seconds][AM][PM] hh:mm[:ss][.fractional seconds][AM][PM] hhAM[PM] hh AM[PM] | The hour value of 0 represents the hour after midnight (AM), regardless of whether AM is specified. PM cannot be specified when the hour equals 0. Hour values from 01 through 11 represent the hours before noon if neither AM nor PM is specified. The values represent the hours before noon when AM is specified. The values represent hours after noon if PM is specified. The hour value 12 represents the hour that starts at noon if neither AM nor PM is specified. If AM is specified, the value represents the hour that starts at midnight. If PM is specified, the value represents the hour that starts at noon. For example, 12:01 is 1 minute after noon, as is 12:01 PM; and 12:01 AM is one minute after midnight. Specifying 12:01 AM is the same as specifying 00:01 or 00:01 AM. Hour values from 13 through 23 represent hours after noon if AM or PM is not specified. The values also represent the hours after noon when PM is specified. AM cannot be specified when the hour value is from 13 through 23. An hour value of 24 is not valid. To represent midnight, use 12:00 AM or 00:00. Milliseconds can be preceded by either a colon (:) or a period (.). If a colon is used, the number means thousandths-of-a-second. If a period is used, a single digit means tenths-of-a-second, two digits mean hundredths-of-a-second, and three digits mean thousandths-of-a-second. For example, 12:30:20:1 indicates 20 and one-thousandth seconds past 12:30; 12:30:20.1 indicates 20 and one-tenth seconds past 12:30. |
ISO 8601 | Notes |
|---|
hh:mm:ss hh:mm[:ss][.fractional seconds] | hh is two digits, ranging from 0 to 14, that represent the number of hours in the time zone offset. mm is two digits, ranging from 0 to 59, that represent the number of additional minutes in the time zone offset.
|
ODBC | Notes |
|---|
{t 'hh:mm:ss[.fractional seconds]'} | ODBC API specific. Functions in SQL Server 2012 as in SQL Server 2005. |

Compliance with ANSI and ISO 8601 Standards
Using hour 24 to represent midnight and leap second over 59 as defined by ISO 8601 (5.3.2 and 5.3) are not supported to be backward compatible and consistent with the existing date and time types. The default string literal format (used for down-level client) will align with the SQL standard form, which is defined as hh:mm:ss[. nnnnnnn]. This format resembles the ISO 8601 definition for TIME excluding fractional seconds.

Backward Compatibility for Down-level Clients
Some down-level clients do not support the time, date, datetime2 and datetimeoffset data types. The following table shows the type mapping between an up-level instance of SQL Server and down-level clients. SQL Server 2012 data type | Default string literal format passed to down-level client | Down-level ODBC | Down-level OLEDB | Down-level JDBC | Down-level SQLCLIENT |
|---|
time | hh:mm:ss[. nnnnnnn] | SQL_WVARCHAR or SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String or SqString | date | YYYY-MM-DD | SQL_WVARCHAR or SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String or SqString | datetime2 | YYYY-MM-DD hh:mm:ss[. nnnnnnn] | SQL_WVARCHAR or SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String or SqString | datetimeoffset | YYYY-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm | SQL_WVARCHAR or SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String or SqString |

Converting Date and Time Data
When you convert to date and time data types, SQL Server rejects all values it cannot recognize as dates or times. For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL) Converting time(n) Data Type to Other Date and Time TypesThe following table describes what occurs when a time data type is converted to other date and time data types. Data type to convert to | Conversion details |
|---|
time(n) | The hour, minute, and seconds are copied. When the destination precision is less than the source precision, the fractional seconds will be truncated to fit the destination precision. The following example shows the results of converting a time(4) value to a time(3) value.
DECLARE @timeFrom time(4) = '12:34:54.1234';
DECLARE @timeTo time(3) = @timeFrom;
SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';
--Results
--time(3) time(4)
-------------- -------------
--12:34:54.123 12:34:54.1234
--
--(1 row(s) affected)
| date | The conversion fails, and error message 206 is raised: "Operand type clash: date is incompatible with time". | datetime | The hour, minute, and second values are copied; and the date component is set to '1900-01-01'. When the fractional seconds precision of the time(n) value is greater than three digits, the datetime result will be truncated. The following code shows the results of converting a time(4) value to a datetime value.
DECLARE @time time(4) = '12:15:04.1234';
DECLARE @datetime datetime= @time;
SELECT @time AS '@time', @datetime AS '@datetime';
--Result
--@time @datetime
--------------- -----------------------
--12:15:04.1234 1900-01-01 12:15:04.123
--
--(1 row(s) affected)
| smalldatetime | The date is set to '1900-01-01', and the hour and minute values are copied. The seconds and fractional seconds are set to 0. The following code shows the results of converting a time(4) value to a smalldatetime value.
DECLARE @time time(4) = '12:15:04.1234';
DECLARE @smalldatetime smalldatetime= @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
--Result
--@time @smalldatetime
--------------- -----------------------
--12:15:04.1234 1900-01-01 12:15:00
--
--(1 row(s) affected)
| datetimeoffset(n) | The date is set to '1900-01-01', and the time is copied. The time zone offset is set to +00:00. When the fractional seconds precision of the time(n) value is greater than the precision of the datetimeoffset(n) value, the value is truncated to fit. The following example shows the results of converting a time(4) value to a datetimeoffset(3) type.
DECLARE @time time(4) = '12:15:04.1234';
DECLARE @datetimeoffset datetimeoffset(3) = @time;
SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';
--Result
--@time @datetimeoffset
--------------- ------------------------------
--12:15:04.1234 1900-01-01 12:15:04.123 +00:00
--
--(1 row(s) affected)
| datetime2(n) | The date is set to '1900-01-01', the time component is copied, and the time zone offset is set to 00:00. When the fractional seconds precision of the datetime2(n) value is greater than the time(n) value, the value will be truncated to fit. The following example shows the results of converting a time(4) value to a datetime2(2) value.
DECLARE @time time(4) = '12:15:04.1234';
DECLARE @datetime2 datetime2(3) = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
--Result
--@datetime2 @time
------------------------- -------------
--1900-01-01 12:15:04.123 12:15:04.1234
--
--(1 row(s) affected)
|
Converting String Literals to time(n)Conversions from string literals to date and time types are permitted if all parts of the strings are in valid formats. Otherwise, a runtime error is raised. Implicit conversions or explicit conversions that do not specify a style, from date and time types to string literals will be in the default format of the current session. The following table shows the rules for converting a string literal to the time data type. Input string literal | Conversion Rule |
|---|
ODBC DATE | ODBC string literals are mapped to the datetime data type. Any assignment operation from ODBC DATETIME literals into timetypes will cause an implicit conversion between datetime and this type as defined by the conversion rules. | ODBC TIME | See ODBC DATE rule above. | ODBC DATETIME | See ODBC DATE rule above. | DATE only | Default values are supplied. | TIME only | Trivial | TIMEZONE only | Default values are supplied. | DATE + TIME | The TIME part of the input string is used. | DATE + TIMEZONE | Not allowed. | TIME + TIMEZONE | The TIME part of the input string is used. | DATE + TIME + TIMEZONE | The TIME part of local DATETIME will be used. |

Examples
A.Comparing date and time Data TypesThe following example compares the results of casting a string to each date and time data type.
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';
Data type | Output |
|---|
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 |
B.Inserting Valid Time String Literals into a time(7) ColumnThe following table lists different string literals that can be inserted into a column of data type time(7) with the values that are then stored in that column. String literal format type | Inserted string literal | time(7) value that is stored | Description |
|---|
SQL Server | '01:01:01:123AM' | 01:01:01.1230000 | When a colon (:) comes before fractional seconds precision, scale cannot exceed three positions or an error will be raised. | SQL Server | '01:01:01.1234567 AM' | 01:01:01.1234567 | When AM or PM is specified, the time is stored in 24-hour format without the literal AM or PM | SQL Server | '01:01:01.1234567 PM' | 13:01:01.1234567 | When AM or PM is specified, the time is stored in 24-hour format without the literal AM or PM | SQL Server | '01:01:01.1234567PM' | 13:01:01.1234567 | A space before AM or PM is optional. | SQL Server | '01AM' | 01:00:00.0000000 | When only the hour is specified, all other values are 0. | SQL Server | '01 AM' | 01:00:00.0000000 | A space before AM or PM is optional. | SQL Server | '01:01:01' | 01:01:01.0000000 | When fractional seconds precision is not specified, each position that is defined by the data type is 0. | ISO 8601 | '01:01:01.1234567' | 01:01:01.1234567 | To comply with ISO 8601, use 24-hour format, not AM or PM. | ISO 8601 | '01:01:01.1234567 +01:01' | 01:01:01.1234567 | The optional time zone difference (TZD) is allowed in the input but is not stored. |
C.Inserting Time String Literal into Columns of Each date and time Date TypeIn the following table the first column shows a time string literal to be inserted into a database table column of the date or time data type shown in the second column. The third column shows the value that will be stored in the database table column. Inserted string literal | Column data type | Value that is stored in column | Description |
|---|
'12:12:12.1234567' | time(7) | 12:12:12.1234567 | If the fractional seconds precision exceeds the value specified for the column, the string will be truncated without error. | '2007-05-07' | date | NULL | Any time value will cause the INSERT statement to fail. | '12:12:12' | smalldatetime | 1900-01-01 12:12:00 | Any fractional seconds precision value will cause the INSERT statement to fail. | '12:12:12.123' | datetime | 1900-01-01 12:12:12.123 | Any second precision longer than three positions will cause the INSERT statement to fail. | '12:12:12.1234567' | datetime2(7) | 1900-01-01 12:12:12.1234567 | If the fractional seconds precision exceeds the value specified for the column, the string will be truncated without error. | '12:12:12.1234567' | datetimeoffset(7) | 1900-01-01 12:12:12.1234567 +00:00 | If the fractional seconds precision exceeds the value specified for the column, the string will be truncated without error. |

See Also
|
hora (Transact-SQL) Define una hora de un día. La hora no distingue la zona horaria y está basada en un reloj de 24 horas.

Descripción de time
Propiedad | Valor |
|---|
Sintaxis | time [ (fractional second precision) ] | Uso | DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) ) | fractional seconds precision | Especifica el número de dígitos de la parte fraccionaria de los segundos. Este valor puede ser un entero de 0 a 7. La precisión predeterminada de las fracciones es 7 (100 ns). | Formato de literal de cadena predeterminado (se usa para el cliente de nivel inferior) | hh:mm:ss[. nnnnnnn] Para obtener más información, vea la sección "Compatibilidad con versiones anteriores de los clientes de niveles inferiores" más adelante. | Intervalo | De 00:00:00.0000000 a 23:59:59.9999999 | Intervalos de elementos | hh es una cifra de dos dígitos, comprendida entre 0 y 23, que representa la hora. mm es una cifra de dos dígitos, comprendida entre 0 y 59, que representa los minutos. ss es una cifra de dos dígitos, comprendida entre 0 y 59, que representa los segundos. n* es una cifra de cero a siete dígitos, comprendida entre 0 y 9999999, que representa las fracciones de segundos. | Longitud de caracteres | De 8 posiciones como mínimo (hh:mm:ss) a 16 como máximo (hh:mm:ss. nnnnnnn) | Precisión, escala (el usuario especifica solo la escala) | Escala especificadaResultado (precisión, escala)Longitud de la columna (bytes)Fracciones segundos precisión time(16,7)57 time(0)(8,0)30-2 time(1)(10,1)30-2 time(2)(11,2)30-2 time(3)(12,3)43-4 time(4)(13,4)43-4 time(5)(14,5)55-7 time(6)(15,6)55-7 time(7)(16,7)55-7 | Tamaño de almacenamiento | 5 bytes (fijo) es el valor predeterminado con el valor predeterminado de 100 ns de precisión de fracciones de segundo. | Precisión | 100 nanosegundos | Valor predeterminado | 00:00:00 Este valor se usa en la parte de hora anexada para la conversión implícita de date a datetime2 o datetimeoffset. | Precisión de fracciones de segundo definida por el usuario | Sí | Conservación y reconocimiento del ajuste de zona horaria | No | Reconocimiento del horario de verano | No |

Formatos de literales de cadena compatibles para time
En la siguiente tabla se muestran los formatos de literales de cadena válidos para el tipo de datos time. SQL Server | Descripción |
|---|
hh:mm[:ss][:fracciones de segundo][AM][PM] hh:mm[:ss][.fracciones de segundo][AM][PM] hhAM[PM] hh AM[PM] | El valor de hora 0 representa la hora desde medianoche (AM), sin tener en cuenta si se especifica AM. PM no se puede especificar si la hora es igual a 0. Las horas de 01 a 11 representan horas antes del mediodía si no se especifica AM ni PM. Si se especifica AM, los valores representan las horas antes del mediodía. Si se especifica PM, los valores representan las horas después del mediodía. El valor de hora 12 representa el mediodía si no se especifica AM ni PM. Si se especifica AM, el valor representa la hora que empieza a medianoche. Si se especifica PM, el valor representa la hora que empieza a mediodía. Por ejemplo, 12:01 es 1 minuto después del mediodía, igual que 12:01 PM, mientras que 12:01 AM es 1 minuto después de medianoche. Especificar 12:01 AM es lo mismo que 00:01 ó 00:01 AM. Los valores de hora de 13 a 23 representan horas después del mediodía si no se especifica AM o PM. Si se especifica PM, los valores también representan las horas después del mediodía. No es posible especificar AM si el valor de hora es de 13 a 23. Un valor de hora de 24 no es válido. Para representar la medianoche, use 12:00 AM o 00:00. Los milisegundos se pueden preceder de dos puntos (:) o un punto (.). Si se usan dos puntos, el número indica milésimas de segundo. Si se usa un punto, un único dígito indica décimas de segundo, dos dígitos indica centésimas de segundo y tres dígitos indica milésimas de segundo. Por ejemplo, 12:30:20:1 indica las 12:30, 20 segundos y una milésima; 12:30:20.1 indica las 12:30, 20 segundos y una décima. |
ISO 8601 | Notas |
|---|
hh:mm:ss hh:mm[:ss][.fracciones de segundo] | hh es una cifra de dos dígitos, de 0 a 14, que representa el número de horas de ajuste de zona horaria. mm es una cifra de dos dígitos, de 0 a 59, que representa el número de minutos adicionales en el ajuste de zona horaria.
|
ODBC | Notas |
|---|
{t 'hh:mm:ss[.fracciones de segundo]'} | Específico de la API de ODBC. Funciona en SQL Server 2012 como en SQL Server 2005. |

Compatibilidad con las normas ANSI e ISO 8601
No se admite el uso de la hora 24 para representar la medianoche y la inserción de un segundo intercalar respecto a 59, como se define en el estándar ISO 8601 (5.3.2 y 5.3), por compatibilidad con versiones anteriores y para mantener la coherencia con los tipos de fecha y hora existentes. El formato predeterminado del literal de cadena (que se usa para el cliente de nivel inferior) se ajustará al formato del estándar SQL, definido como hh:mm:ss[. nnnnnnn]. Este formato es similar a la definición de ISO 8601 para TIME, sin incluir las fracciones de segundo.

Compatibilidad con versiones anteriores de los clientes de niveles inferiores
Algunos clientes de niveles inferiores no admiten los tipos de datos time, date, datetime2 y datetimeoffset. En la tabla siguiente se muestra la asignación de tipo entre una instancia de nivel superior de SQL Server y los clientes de nivel inferior. Tipo de datos SQL Server 2012 | El formato del literal de cadena predeterminado se pasó al cliente de nivel inferior | ODBC de nivel inferior | OLEDB de nivel inferior | JDBC de nivel inferior | SQLCLIENT de nivel inferior |
|---|
time | hh:mm:ss[. nnnnnnn] | SQL_WVARCHAR o SQL_VARCHAR | DBTYPE_WSTR o DBTYPE_STR | Java.sql.String | Cadena o SqString | date | AAAA-MM-DD | SQL_WVARCHAR o SQL_VARCHAR | DBTYPE_WSTR o DBTYPE_STR | Java.sql.String | Cadena o SqString | datetime2 | AAAA-MM-DD hh:mm:ss[. nnnnnnn] | SQL_WVARCHAR o SQL_VARCHAR | DBTYPE_WSTR o DBTYPE_STR | Java.sql.String | Cadena o SqString | datetimeoffset | AAAA-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm | SQL_WVARCHAR o SQL_VARCHAR | DBTYPE_WSTR o DBTYPE_STR | Java.sql.String | Cadena o SqString |

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 usar las funciones CAST y CONVERT con datos de fecha y hora, vea CAST y CONVERT (Transact-SQL). Convertir el tipo de datos time(n) en otros tipos de fecha y horaEn la tabla siguiente se describe lo que ocurre cuando un tipo de datos time se convierte a otros tipos de datos de fecha y hora. Tipo de datos al que se convierte | Detalles de la conversión |
|---|
time(n) | Se copian los valores de hora, minuto y segundo. Cuando la precisión de destino es menor que la precisión de origen, las fracciones de segundo se truncarán para ajustarse a la precisión de destino. El ejemplo siguiente muestra los resultados de convertir un valor de time(4) en un valor de time(3).
DECLARE @timeFrom time(4) = '12:34:54.1234';
DECLARE @timeTo time(3) = @timeFrom;
SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';
--Results
--time(3) time(4)
-------------- -------------
--12:34:54.123 12:34:54.1234
--
--(1 row(s) affected)
| date | La conversión no se produce y se recibe el mensaje de error 206: "Conflicto de tipos de operandos: date es incompatible con time". | datetime | Se copian los valores de hora, minuto y segundo, y el componente de fecha se establece en '1900-01-01'. Cuando la precisión de las fracciones de segundo del valor de time(n) es superior a tres dígitos, el resultado de datetime se truncará. El código siguiente muestra los resultados de convertir un valor de time(4) en un valor de datetime.
DECLARE @time time(4) = '12:15:04.1234';
DECLARE @datetime datetime= @time;
SELECT @time AS '@time', @datetime AS '@datetime';
--Result
--@time @datetime
--------------- -----------------------
--12:15:04.1234 1900-01-01 12:15:04.123
--
--(1 row(s) affected)
| smalldatetime | La fecha se establece en '1900-01-01', y se copian los valores de hora y minuto. Los segundos y las fracciones de segundo se establecen en 0. El código siguiente muestra los resultados de convertir un valor de time(4) en un valor de smalldatetime.
DECLARE @time time(4) = '12:15:04.1234';
DECLARE @smalldatetime smalldatetime= @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
--Result
--@time @smalldatetime
--------------- -----------------------
--12:15:04.1234 1900-01-01 12:15:00
--
--(1 row(s) affected)
| datetimeoffset(n) | La fecha se establece '1900-01-01', y se copia la hora. El ajuste de zona horaria se establece en +00:00. Cuando la precisión de las fracciones de segundo del valor de time(n) es mayor que la precisión del valor de datetimeoffset(n), el valor se trunca para ajustarse. El ejemplo siguiente muestra los resultados de convertir un valor de time(4) en un tipo datetimeoffset(3).
DECLARE @time time(4) = '12:15:04.1234';
DECLARE @datetimeoffset datetimeoffset(3) = @time;
SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';
--Result
--@time @datetimeoffset
--------------- ------------------------------
--12:15:04.1234 1900-01-01 12:15:04.123 +00:00
--
--(1 row(s) affected)
| datetime2(n) | La fecha se establece en '1900-01-01', se copia el componente de hora, y el ajuste de zona horaria se establece en 00:00. Cuando la precisión de las fracciones de segundo del valor de datetime2(n) es mayor que el valor de time(n), el valor se truncará para ajustarse. En el ejemplo siguiente se muestran los resultados de convertir un valor time(4) en un valor datetime2(2).
DECLARE @time time(4) = '12:15:04.1234';
DECLARE @datetime2 datetime2(3) = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
--Result
--@datetime2 @time
------------------------- -------------
--1900-01-01 12:15:04.123 12:15:04.1234
--
--(1 row(s) affected)
|
Convertir literales de cadena a time(n)Las conversiones de literales de cadena en tipos de fecha y hora son posibles cuando todas las partes de las cadenas están en formatos válidos. En caso contrario, se generará un error en el tiempo de ejecución. Las conversiones implícitas o explícitas que no especifican un estilo (desde tipos de fecha y hora hasta literales de cadena) estarán en el formato predeterminado de la sesión actual. En la tabla siguiente se muestran las reglas para convertir un literal de cadena al tipo de datos time. Literal de cadena de entrada | Regla de conversión |
|---|
DATE de ODBC | Los literales de cadena de ODBC se asignan al tipo de datos datetime. Cualquier operación de asignación de los literales de DATETIME de ODBC a tipos time provocarán una conversión implícita entre datetime y este tipo, tal y como se define en las reglas de conversión. | TIME de ODBC | Vea la regla de DATE de ODBC anterior. | DATETIME de ODBC | Vea la regla de DATE de ODBC anterior. | Solo DATE | Se proporcionan los valores predeterminados. | Solo TIME | Trivial | Solo TIMEZONE | Se proporcionan los valores predeterminados. | DATE + TIME | Se usa la parte de TIME de la cadena de entrada. | DATE + TIMEZONE | No permitido. | TIME + TIMEZONE | Se usa la parte de TIME de la cadena de entrada. | DATE + TIME + TIMEZONE | Se usará la parte de TIME de DATETIME local. |

Ejemplos
A.Comparar tipos de datos de fecha y horaEn el ejemplo siguiente se comparan los resultados de convertir una cadena a los tipos de datos date y time.
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';
Tipo de datos | Resultados |
|---|
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 |
B.Insertar literales de cadena time válidos en una columna time(7)En la siguiente tabla se enumeran varios literales de cadena que se pueden insertar en una columna de tipo de datos time(7) con los valores que se almacenan en dicha columna. Tipo de formato de literal de cadena | Literal de cadena insertado | Valor de time(7) almacenado | Descripción |
|---|
SQL Server | '01:01:01:123AM' | 01:01:01.1230000 | Si dos puntos (:) preceden la precisión en fracciones de segundo, la escala no puede tener más de tres posiciones ya que, de lo contrario, se producirá un error. | SQL Server | '01:01:01.1234567 AM' | 01:01:01.1234567 | Si se especifica AM o PM, la hora se almacenará en formato de 24 horas sin el literal AM o PM | SQL Server | '01:01:01.1234567 PM' | 13:01:01.1234567 | Si se especifica AM o PM, la hora se almacenará en formato de 24 horas sin el literal AM o PM | SQL Server | '01:01:01.1234567PM' | 13:01:01.1234567 | El espacio antes de AM o PM es opcional. | SQL Server | '01AM' | 01:00:00.0000000 | Si solo se especifica la hora, todos los demás valores son 0. | SQL Server | '01 AM' | 01:00:00.0000000 | El espacio antes de AM o PM es opcional. | SQL Server | '01:01:01' | 01:01:01.0000000 | Si no se especifican las fracciones de segundo, cada posición definida por el tipo de datos será 0. | ISO 8601 | '01:01:01.1234567' | 01:01:01.1234567 | Para cumplir las especificaciones del estándar ISO 8601, use el formato de 24 horas, no el formato AM o PM. | ISO 8601 | '01:01:01.1234567 +01:01' | 01:01:01.1234567 | Se puede insertar el designador opcional de diferencia de zona horaria (TZD), aunque no se almacenará. |
C.Insertar literales de cadena time en columnas de tipo de datos date y timeEn la siguiente tabla, la primera columna muestra un literal de cadena time que se insertará en una columna de la tabla de base de datos con el tipo de datos date o time indicado en la segunda columna. La tercera columna muestra el valor que se almacenará en la columna de la tabla de base de datos. Literal de cadena insertado | Tipo de datos de columna | Valor almacenado en la columna | Descripción |
|---|
'12:12:12.1234567' | time(7) | 12:12:12.1234567 | Si la precisión en fracciones de segundo supera el valor especificado en la columna, la cadena quedará truncada y no generará un error. | '2007-05-07' | date | NULL | Cualquier valor de time producirá un error en la instrucción INSERT. | '12:12:12' | smalldatetime | 1900-01-01 12:12:00 | Cualquier valor de precisión en fracciones de segundo producirá un error en la instrucción INSERT. | '12:12:12.123' | datetime | 1900-01-01 12:12:12.123 | Cualquier precisión en segundos de más de tres posiciones producirá un error en la instrucción INSERT. | '12:12:12.1234567' | datetime2(7) | 1900-01-01 12:12:12.1234567 | Si la precisión en fracciones de segundo supera el valor especificado en la columna, la cadena quedará truncada y no generará un error. | '12:12:12.1234567' | datetimeoffset(7) | 1900-01-01 12:12:12.1234567 +00:00 | Si la precisión en fracciones de segundo supera el valor especificado en la columna, la cadena quedará truncada y no generará un error. |

Vea también
|