Estilos de fecha y hora
Cuando expression es un tipo de datos de fecha u hora, style puede ser uno de los valores que se muestran en la tabla siguiente. Otros valores se procesan como 0. SQL Server admite el formato de fecha en estilo árabe utilizando el algoritmo Kuwaiti.
|
Sin el siglo (aa) (1)
|
Con el siglo ?(aaaa)
|
Estándar
|
Entrada/salida (3)
|
|---|
|
-
|
0 o 100 (1, 2)
|
Valor predeterminado
|
mes dd aaaa hh:mia.m. (o p. m.)
|
|
1
|
101
|
EE.UU.
|
mm/dd/aaaa
|
|
2
|
102
|
ANSI
|
aa.mm.dd
|
|
3
|
103
|
Británico/Francés
|
dd/mm/aaaa
|
|
4
|
104
|
Alemán
|
dd.mm.aa
|
|
5
|
105
|
Italiano
|
dd-mm-aa
|
|
6
|
106 (1)
|
-
|
dd mes aa
|
|
7
|
107 (1)
|
-
|
Mes dd, aa
|
|
8
|
108
|
-
|
hh:mi:ss
|
|
-
|
9 o 109 (1, 2)
|
Valor predeterminado + milisegundos
|
mes dd aaaa hh:mi:ss:mmma.m. (o p. m.)
|
|
10
|
110
|
EE.UU.
|
mm-dd-aa
|
|
11
|
111
|
JAPÓN
|
aa/mm/dd
|
|
12
|
112
|
ISO
|
aammdd
aaaammdd
|
|
-
|
13 o 113 (1, 2)
|
Europeo predeterminado + milisegundos
|
dd mes aaaa hh:mi:ss:mmm(24h)
|
|
14
|
114
|
-
|
hh:mi:ss:mmm(24h)
|
|
-
|
20 o 120 (2)
|
ODBC canónico
|
aaaa-mm-dd hh:mi:ss(24h)
|
|
-
|
21 o 121 (2)
|
ODBC canónico (con milisegundos)
|
aaaa-mm-dd hh:mi:ss.mmm(24h)
|
|
-
|
126 (4)
|
ISO8601
|
aaaa-mm-ddThh:mi:ss.mmm (sin espacios)
|
|
-
|
127(6, 7)
|
ISO8601 con zona horaria Z.
|
aaaa-mm-ddThh:mi:ss.mmmZ
(sin espacios)
|
|
-
|
130 (1, 2)
|
Hijri (5)
|
dd mes aaaa hh:mi:ss:mmma.m.
|
|
-
|
131 (2)
|
Hijri (5)
|
dd/mm/aa hh:mi:ss:mmma.m.
|
1 Estos valores de estilo devuelven resultados no deterministas. Incluye todos los estilos (aa) (sin el siglo) y un subconjunto de estilos (aaaa) (con el siglo).
2 Los valores predeterminados (style 0 o 100, 9 o 109, 13 o 113, 20 o 120 y 21 o 121) siempre devuelven el siglo (aaaa).
3 Entrada cuando se convierte en datetime; salida cuando se convierte en datos de caracteres.
4 Diseñado para usarse con XML. Para convertir datos datetime o smalldatetime en datos de caracteres, el formato de salida es el descrito en la tabla anterior.
5 Hijri es un sistema de calendario con varias variaciones. SQL Server usa el algoritmo Kuwaiti.
Importante: |
|---|
|
De manera predeterminada, SQL Server interpreta los años de dos dígitos según el año límite 2049. Es decir, el año 49 de dos dígitos se interpreta como 2049 y el año 50 de dos dígitos se interpreta como 1950. Muchas aplicaciones cliente, como las basadas en objetos de automatización, utilizan como límite el año 2030. SQL Server proporciona la opción de configuración two digit year cutoff que cambia el año límite utilizado por SQL Server y permite el tratamiento coherente de las fechas. Se recomienda especificar años de cuatro dígitos.
|
6 Sólo se admite en la conversión de datos de caracteres a datetime o smalldatetime. Cuando se convierten datos de caracteres que representan componentes de sólo fecha o sólo hora al tipo de datos datetime o smalldatetime, el componente de hora no especificado se establece en 00:00:00.000 y el componente de fecha no especificado se establece en 1900-01-01.
7El indicador opcional de zona horaria, Z, se usa para facilitar la asignación de valores XML de tipo datetime que contienen información de zona horaria a valores de tipo datetime de SQL Server que no tienen zona horaria. Z es el indicador para zona horaria UTC-0. Las otras zonas horarias se indican con un desplazamiento de HH:MM en sentido + o -. Por ejemplo: 2006-12-12T23:45:12-08:00.
Cuando se convierten datos de caracteres de tipo smalldatetime, los estilos que incluyen segundos o milisegundos muestran ceros en dichas posiciones. Puede truncar las partes de la fecha no deseadas cuando convierta valores datetime o smalldatetime si utiliza una longitud apropiada en el tipo de datos char o varchar.
Cuando se convierte en datetimeoffset a partir de datos de caracteres con un estilo que incluye una hora, se anexa un ajuste de zona horaria al resultado.
Estilos float y real
Cuando expression es float o real, style puede ser uno de los valores que se muestran en la tabla siguiente. Otros valores se procesan como 0.
|
Valor
|
Resultado
|
|---|
|
0 (valor predeterminado)
|
Un máximo de 6 dígitos. Utilícelo en notación científica cuando proceda.
|
|
1
|
Siempre 8 dígitos. Utilícelo siempre en notación científica.
|
|
2
|
Siempre 16 dígitos. Utilícelo siempre en notación científica.
|
|
126, 128, 129
|
Se incluye por razones heredadas y podría quedar obsoleto en una versión futura.
|
Estilos money y smallmoney
Cuando expression es money o smallmoney,style, puede ser uno de los valores que se muestran en la tabla siguiente. Otros valores se procesan como 0.
|
Valor
|
Resultado
|
|---|
|
0 (valor 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.
|
|
126
|
Equivalente al estilo 2 al convertir a char(n) o varchar(n)
|
Estilos xml
Cuando expression es xml, style puede ser uno de los valores que se muestran en la tabla siguiente. Otros valores se procesan como 0.
|
Valor
|
Resultado
|
|---|
|
0 (valor predeterminado)
|
Utiliza el comportamiento de análisis predeterminado que descarta los espacios en blanco insignificantes y no permite un subconjunto DTD interno.
Nota:
Al convertir al tipo de datos xml, los espacios en blanco insignificantes de SQL Server se controlan de forma distinta que en XML 1.0. Para obtener más información, vea Generar instancias XML.
|
|
1
|
Conserva los espacios en blanco insignificantes. Esta configuración establece el control xml:space predeterminado de modo que se comporte igual que si se hubiera especificado xml:space="preserve".
|
|
2
|
Habilita el procesamiento limitado de subconjuntos DTD internos.
Si está habilitado, el servidor puede utilizar la siguiente información proporcionada en un subconjunto DTD interno para realizar operaciones de análisis que no se validan.
-
Se aplican los valores predeterminados de los atributos.
-
Las referencias a entidades internas se resuelven y se amplían.
-
Se comprobará la corrección sintáctica del modelo de contenido DTD.
El analizador pasará por alto los subconjuntos DTD externos. Tampoco evalúa la declaración XML para ver si el atributo standalone está establecido en yes o no, pero analiza la instancia XML como si se tratase de un documento independiente.
|
|
3
|
Conserva los espacios en blanco insignificantes y habilita el procesamiento limitado de los subconjuntos DTD internos.
|
Estilos binarios
Cuando expression es binary(n), varbinary(n), char(n) o varchar(n), style puede ser uno de los valores que se muestran en la tabla siguiente. Los valores de estilos que no se enumeran en la tabla devuelven un error.
|
Valor
|
Salida
|
|---|
|
0 (predeterminado)
|
Traduce caracteres ASCII a bytes binarios o bytes binarios a caracteres ASCII. Cada carácter o byte se convierte con una proporción 1:1.
Si data_type es un tipo binario, los caracteres 0x se agregan a la izquierda del resultado.
|
|
1, 2
|
Si data_type es un tipo binario, la expresión debe ser de caracteres. expression se debe componer de un número par de dígitos hexadecimales (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, a, b, c, d, e, f). Si style se establece en 1, los caracteres 0x deben ser los dos primeros caracteres de la expresión. Si la expresión contiene un número impar de caracteres o si alguno de los caracteres no es válido, se produce un error.
Si la longitud de la expresión convertida es mayor que la longitud de data_type, el resultado se truncará a la derecha.
Los data_types de longitud fija que sean mayores que el resultado convertido tendrán ceros agregados a la derecha del resultado.
Si data_type es un tipo de caracteres, la expresión debe ser binaria. Cada carácter binario se convierte en dos caracteres hexadecimales. Si la longitud de la expresión convertida es mayor que la longitud de data_type, se truncará a la derecha.
Si data_type es un tipo de caracteres de tamaño fijo y la longitud del resultado convertido es menor que la longitud de data_type, los espacios se agregan a la derecha de la expresión convertida para mantener un número par de dígitos hexadecimales.
Los caracteres 0x se agregarán a la izquierda del resultado convertido para style 1.
|
Conversiones implícitas
Las conversiones implícitas son aquellas conversiones que tienen lugar sin especificar las funciones CAST o CONVERT. Las conversiones explícitas son aquellas conversiones que requieren la especificación de las funciones CAST o CONVERT. En la siguiente ilustración se muestran todas las conversiones de tipos de datos explícitas e implícitas permitidas para los tipos de datos proporcionados por el sistema de SQL Server. Incluyen xml, bigint y sql_variant. No existe una conversión implícita en la asignación del tipo de datos sql_variant, pero sí hay una conversión implícita en sql_variant.
Al convertir entre datetimeoffset y los tipos de caracteres char, varchar, nchar y nvarchar la parte del ajuste de zona horaria convertida siempre debe tener dígitos dobles para HH y MM, por ejemplo -08:00.
Nota: |
|---|
Puesto que los datos Unicode siempre utilizan un número par de bytes, preste atención al convertir datos binary o varbinary en o desde tipos de datos compatibles con Unicode. Por ejemplo, la siguiente conversión no devuelve el valor hexadecimal 41, sino 4100: SELECT CAST(CAST(0x41 AS nvarchar) AS varbinary).
|
Tipos de datos de valor grande
Los tipos de datos de valor grande tienen el mismo comportamiento de conversión implícito y explícito que sus equivalentes más pequeños, especialmente los tipos de datos varchar, nvarchar y varbinary. No obstante, se deben tener en cuenta las siguientes directrices:
-
La conversión de datos image en varbinary(max) y viceversa es una conversión implícita, al igual que las conversiones entre text y varchar(max) y entre ntext y nvarchar(max).
-
La conversión de tipos de datos de valor grande, como varchar(max), en un tipo de datos equivalente más pequeño, como varchar, es una conversión implícita, aunque se producirá truncamiento si el valor grande es demasiado grande para la longitud especificada del tipo de datos más pequeño.
-
La conversión de varchar, nvarchar o varbinary en sus tipos de datos correspondientes de valor grande se realiza de forma implícita.
-
La conversión del tipo de datos sql_variant en los tipos de datos de valor grande es una conversión explícita.
-
Los tipos de datos de valor grande no se pueden convertir en el tipo de datos sql_variant.
Para obtener información acerca de la conversión de tipos definidos por el usuario CLR (Common Language Runtime) de Microsoft .NET Framework, vea Realizar operaciones en tipos definidos por el usuario. Para obtener más información acerca de la conversión del tipo de datos xml, vea Generar instancias XML.
xml Data Type
Cuando se convierte de forma explícita o implícita el tipo de datos xml en un tipo de datos de cadena o binario, el contenido del tipo de datos xml se serializa en función de un conjunto de reglas. Para obtener información sobre estas reglas, vea Serialización de datos XML. Para obtener información sobre la conversión del tipo XML al tipo definido por el usuario CLR, vea Realizar operaciones en tipos definidos por el usuario. Para obtener información sobre la conversión de otros tipos de datos al tipo de datos xml, vea Generar instancias XML.
Tipos de datos text e image
No se admite la conversión automática de los tipos de datos text e image. Puede convertir explícitamente datos text en datos de caracteres y datos image en binary o varbinary, pero la longitud máxima es de 8000 bytes. Si intenta una conversión incorrecta, como la de una expresión de caracteres que incluye letras en un tipo int, SQL Server devuelve un mensaje de error.
Intercalación de salida
Cuando la salida de CAST o CONVERT es una cadena de caracteres y la entrada es otra, la salida tiene la misma intercalación y etiqueta de intercalación que la entrada. Si la entrada no es una cadena de caracteres, la salida tiene la intercalación predeterminada de la base de datos y una etiqueta de intercalación coaccionable-predeterminada. Para obtener más información, vea Prioridad de intercalación (Transact-SQL).
Para asignar otra intercalación a la salida, aplique la cláusula COLLATE a la expresión de resultado de las funciones CAST o CONVERT. Por ejemplo:
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS
Truncar y redondear resultados
Al convertir expresiones de caracteres o binarias (char, nchar, nvarchar, varchar, binary o varbinary) en una expresión de un tipo de datos diferente, los datos se pueden truncar, se pueden presentar parcialmente o se puede devolver un error porque el resultado es demasiado corto para ser mostrado. Las conversiones en char, varchar, nchar, nvarchar, binary y varbinary se truncan, excepto aquellas que se muestran en la siguiente tabla.
|
De tipo de datos
|
En tipo de datos
|
Resultado
|
|---|
|
int, smallint o tinyint
|
char
|
*
|
|
|
varchar
|
*
|
|
|
nchar
|
E
|
|
|
nvarchar
|
E
|
|
money, smallmoney, numeric, decimal, float o real
|
char
|
E
|
|
|
varchar
|
E
|
|
|
nchar
|
E
|
|
|
nvarchar
|
E
|
* = Resultado demasiado corto para ser mostrado. E = Error devuelto porque el resultado es demasiado corto para ser mostrado.
SQL Server garantiza que sólo las conversiones circulares, las conversiones que convierten un tipo de datos en otro y después vuelven a convertirlo en el tipo de datos original, devolverán los mismos valores en versiones diferentes. En el siguiente ejemplo se muestra una conversión circular:
DECLARE @myval decimal (5, 2)
SET @myval = 193.57
SELECT CAST(CAST(@myval AS varbinary(20)) AS decimal(10,5))
-- Or, using CONVERT
SELECT CONVERT(decimal(10,5), CONVERT(varbinary(20), @myval))
Nota: |
|---|
|
No intente crear valores de tipo binary y, a continuación, convertirlos en un tipo de datos de la categoría de tipos de datos numéricos. SQL Server no garantiza que el resultado de una conversión de un tipo de datos decimal o numeric en binary sea el mismo en versiones diferentes de SQL Server.
|
En el siguiente ejemplo se muestra una expresión resultante demasiado corta para ser mostrada.
USE AdventureWorks;
GO
SELECT c.FirstName, c.LastName, SUBSTRING(c.Title, 1, 25) AS Title, CAST(e.SickLeaveHours AS char(1)) AS 'Sick Leave'
FROM HumanResources.Employee e JOIN Person.Contact c ON e.EmployeeID = c. ContactID
WHERE NOT EmployeeID >5
Éste es el conjunto de resultados.
FirstName LastName Title Sick Leave
--------- --------- ------------------- -----------
Gustavo Achong Mr. *
Catherine Abel Ms. *
Kim Abercrombie Ms. *
Humberto Acevedo Sr. *
Pilar Ackerman Sra. *
(5 row(s) affected)
Al convertir tipos de datos que difieren en los decimales, algunas veces el valor resultante se trunca y otras se redondea. En la siguiente tabla se muestra el comportamiento.
|
De
|
A
|
Comportamiento
|
|---|
|
numeric
|
numeric
|
Redondeo
|
|
numeric
|
int
|
Truncamiento
|
|
numeric
|
money
|
Redondeo
|
|
money
|
int
|
Redondeo
|
|
money
|
numeric
|
Redondeo
|
|
float
|
int
|
Truncamiento
|
|
float
|
numeric
|
Redondeo
|
|
float
|
datetime
|
Redondeo
|
|
datetime
|
int
|
Redondeo
|
Por ejemplo, el resultado de la siguiente conversión es 10:
SELECT CAST(10.6496 AS int)
Al convertir tipos de datos cuando el tipo de datos de destino tiene menos decimales que el tipo de datos de origen, el valor se redondea. Por ejemplo, el resultado de la siguiente conversión es $10.3497:
SELECT CAST(10.3496847 AS money)
SQL Server devuelve un mensaje de error cuando se convierten datos de tipo char, nchar, varchar o nvarchar no numéricos en datos de tipo int, float, numeric o decimal. SQL Server también devuelve un error cuando una cadena vacía (" ") se convierte en datos de tipo numeric o decimal.
Determinadas conversiones de fecha y hora son no deterministas en SQL Server 2005 y versiones posteriores
En SQL Server 2000, las conversiones de cadena a fecha y hora se marcan como deterministas. Sin embargo, esto no se aplica a los estilos descritos en la siguiente tabla. Para estos estilos, las conversiones dependen de la configuración de idioma. SQL Server 2005 y versiones posteriores marcan estas conversiones como no deterministas.
En la siguiente tabla se muestran los estilos para los que la conversión de cadena a fecha y hora es no determinista.
|
Todos los estilos por debajo de 1001
|
106
|
|
107
|
109
|
|
113
|
130
|
1 Con la excepción de los estilos 20 y 21