Inv Tdatos Sqls

137
http://msdn.microsoft.com/es-es/library/ms187752.aspx Tipos de datos (Transact-SQL) SQL Server 2012 Otras versiones Personas que lo han encontrado útil: 16 de 23 - Valorar este tema En SQL Server, cada columna, variable local, expresión y parámetro tiene un tipo de datos relacionado. Un tipo de datos es un atributo que especifica el tipo de datos que el objeto puede contener: datos de enteros, datos de caracteres, datos de moneda, datos de fecha y hora, cadenas binarias, etc. SQL Server proporciona un conjunto de tipos de datos del sistema que define todos los tipos de datos que pueden utilizarse con SQL Server. También puede definir sus propios tipos de datos en Transact-SQL o Microsoft .NET Framework. Los tipos de datos de alias están basados en los tipos de datos proporcionados por el sistema. Para obtener más información acerca de los tipos de datos de alias, vea CREATE TYPE (Transact-SQL). Los tipos definidos por el usuario obtienen sus características de los métodos y los operadores de una clase que se crean mediante uno de los lenguajes de programación compatibles con .NET Framework. Cuando dos expresiones que tienen tipos de datos, intercalaciones, precisión, escala o longitud diferentes son combinadas por un operador, las características del resultado vienen determinadas por lo siguiente: El tipo de datos del resultado viene determinado por la aplicación de las reglas de precedencia de tipos de datos a los tipos de datos de las expresiones de entrada. Para obtener más información, vea Prioridad de tipo de datos (Transact-SQL). La intercalación del resultado viene determinada por las reglas de precedencia de intercalación cuando el tipo de datos del resultado es char, varchar, text, nchar, nvarchar o ntext. Para obtener más información, vea Prioridad de intercalación (Transact-SQL). La precisión, escala y longitud del resultado dependen de la precisión, escala y longitud de las expresiones de entrada. Para obtener más información, vea Precisión, escala y longitud (Transact-SQL). SQL Server proporciona sinónimos de tipos de datos para la compatibilidad con ISO. Para obtener más información, vea Sinónimos de tipos de datos (Transact-SQL).

Transcript of Inv Tdatos Sqls

http://msdn.microsoft.com/es-es/library/ms187752.aspx

Tipos de datos (Transact-SQL)SQL Server 2012Otras versiones

Personas que lo han encontrado útil: 16 de 23 - Valorar este tema

En SQL Server, cada columna, variable local, expresión y parámetro tiene un tipo de datos relacionado. Un tipo de datos es un atributo que especifica el tipo de datos que el objeto puede contener: datos de enteros, datos de caracteres, datos de moneda, datos de fecha y hora, cadenas binarias, etc.SQL Server proporciona un conjunto de tipos de datos del sistema que define todos los tipos de datos que pueden utilizarse con SQL Server. También puede definir sus propios tipos de datos en Transact-SQL o Microsoft .NET Framework. Los tipos de datos de alias están basados en los tipos de datos proporcionados por el sistema. Para obtener más información acerca de los tipos de datos de alias, vea CREATE TYPE (Transact-SQL). Los tipos definidos por el usuario obtienen sus características de los métodos y los operadores de una clase que se crean mediante uno de los lenguajes de programación compatibles con .NET Framework.Cuando dos expresiones que tienen tipos de datos, intercalaciones, precisión, escala o longitud diferentes son combinadas por un operador, las características del resultado vienen determinadas por lo siguiente:

El tipo de datos del resultado viene determinado por la aplicación de las reglas de precedencia de tipos de datos a los tipos de datos de las expresiones de entrada. Para obtener más información, vea Prioridad de tipo de datos (Transact-SQL).

La intercalación del resultado viene determinada por las reglas de precedencia de intercalación cuando el tipo de datos del resultado es char, varchar, text, nchar, nvarchar o ntext. Para obtener más información, vea Prioridad de intercalación (Transact-SQL).

La precisión, escala y longitud del resultado dependen de la precisión, escala y longitud de las expresiones de entrada. Para obtener más información, vea Precisión, escala y longitud (Transact-SQL).

SQL Server proporciona sinónimos de tipos de datos para la compatibilidad con ISO. Para obtener más información, vea Sinónimos de tipos de datos (Transact-SQL).

Categorías de tipos de datos

Los tipos de datos de SQL Server se organizan en las siguientes categorías:

Numéricos exactos

bigint numeric

bit smallint

decimal smallmoney

int tinyint

money  

Numéricos aproximados

float real

Fecha y hora

Fecha datetimeoffset

datetime2 smalldatetime

datetime time

Cadenas de caracteres

char varchar

text  

Cadenas de caracteres Unicode

nchar nvarchar

ntext  

Cadenas binarias

binary varbinary

image  

domingo, 6 de marzo de 2011

SQL SERVER 2008: Tipos de DatoCategoría Descripción Tipo de Dato Descripción

Binary

Un dato Binary almacena cadenas de bits. El dato consiste de números hexadecimales. Por ejemplo, el número decimal 245 vale en hexadecimal F5.

binaryLos datos deben tener la misma longitud fija (hasta 8 KB)

varbinaryLos datos pueden variar en el número de dígitos hexadecimales (hasta 8 KB)

imageLos datos pueden ser de longitud variable y exceder los  8 KB.

Character

Los datos Character consisten de cualquier combinación de letras, símbolos, y caracteres numéricos. Por ejemplo, datos  character válidos:"John928"  "(0*&(%B99nh jkJ"

charLos datos deben tener la misma longitud fija (hasta 8 KB)

varcharLos datos pueden variar en el número de  caracteres (hasta 8 KB)

textLos datos pueden ser cadena de caracteres ASCII que excedan los 8 KB.

Date time

Los datos Date time consisten de combinaciones de fechas o horas válidas. No existe tipos de datos separados para fechas y horas para almacenar solo fechas o solo horas

datetime

Los datos fecha están comprendidos entre en el 1 de Enero de 1753 hasta el 31 de diciembre de 9999 (requiere 8 bytes por dato).

smalldatetime

Los datos fecha están comprendidos entre en el 1 de Enero de 1900 hasta el 31 de diciembre de 2079 (requiere 4 bytes por dato).

Decimal Los datos Decimal consisten de datos numéricos que son almacenados al menor dígito significativo

decimal

Los datos pueden tener un máximo de 30 dígitos, que pueden estar todos a la derecha de la coma decimal. El tipo de dato almacena un representación exacta del número.

numeric En SQL Server, el tipo de datos numeric es

Categoría Descripción Tipo de Dato Descripción

equivalente al tipo de datos decimal.

Floating point

Datos numéricos aproximados que consisten de datos con una aproximación tanto como el sistema de numeración binaria pueda ofrecer

floatDesde –1.79E + 308 a 1.79E + 308.

realDesde –3.40E + 38 a 3.40E + 38.

Integer

Los datos Integer consisten de números enteros positivos y negativos tales como: –15, 0, 5, y 2.509.

bigint

Desde –2^63 (–9223372036854775808) a 2^63–1 (9223372036854775807). Tamaño 8 bytes.

intDesde –2.147.483.648 a 2.147.483.647 (requiere de 4 bytes por valor).

smallintDesde –32,768 a 32.767  (requiere de 2 bytes por valor).

tinyintDesde cero a 255 (requiere de 1 bytes por valor).

MonetaryMonetary representa montos de dinero positivos o negativos

money

Desde –922.337.203.685.477,5808 a +922.337.203.685.477,5807 Tamaño 8 bytes.

smallmoneyDesde –214.748,3648 a 214.748,3647 Tamaño 4 bytes.

SpecialSpecial se utiliza para datos que caben en ninguna de las categorís anteriores.

bit

Consisten en un 1 o un 0. Se usan para representar valores lógicos VERDADERO o FALSO, SI o NO

cursor

Este tipo de dato es usado para variables o prámetros OUTPUT en procedimientos almacenados que contenga una referencia a un cursor. Cualquier variable creada con el tipo de datos cursor puede tomar valor nulo

Categoría Descripción Tipo de Dato Descripción

timestamp

Este tipo de datos es usado para indicar la secuencia de la actividad del SQL Server sobre una fila y es representado por un número incremental en formato binario.

uniqueidentifier

Consiste de números hexadecimales de 16 byte, indicando un identificador único global (GUID). Los GUID son usados cuando una columna deba ser única frente a cualquier otra columna.

SQL_variant

Este tipo de datos soporta a cualquier otro tipo de datos soportado por SQL Server excepto text, ntext, timestamp, image, y sql_variant.

table

Es utilizado para almacenar un conjunto de resultados para su posterior procesamiento. El tipo de datos Table puede ser usado únicamente para para definir variable locales de tipo table o para retornar valores de una función definida por el usuario.

Unicode

Al usar tipo de datos Unicode, una columna puede almacenar cualquier cualquier caracter definido por el estándar Unicode. Lo cual incluye a todos los caracteres definidos en los distintos conjuntos de caracteres. Los tipos de datos Unicode toman el doble de espacio de almacenamiento que los tipos no-Unicode.

ncharLos datos deben tener la misma longitud fija (hasta 4000 caracteres Unicode)

nvarchar

Los datos pueden variar en el número de  caracteres (hasta 4000 caracteres Unicode)

ntext Los datos pueden exceder los 4000 caracteres

Categoría Descripción Tipo de Dato Descripción

Unicode.

http://vhcardenas.blogspot.mx/2011/03/sql-server-2008-tipos-de-dato.html

int, bigint, smallint y tinyint (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 10 de 13 - Valorar este tema

Tipos de datos numéricos exactos que utilizan datos enteros.

Tipo de datos

IntervaloAlmacenamiento

bigint De -2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807)

8 bytes

int De -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647) 4 bytes

smallint De -2^15 (-32.768) a 2^15-1 (32.767) 2 bytes

tinyint De 0 a 255 1 byte

Comentarios

El tipo de datos int es el principal tipo de datos de valores enteros de SQL Server. El tipo de datos bigint está pensado para utilizarse cuando los valores enteros pueden exceder el intervalo admitido por el tipo de datos int.bigint se encuentra entre smallmoney e int en el gráfico de prioridad de tipo de datos.Las funciones solo devuelven bigint si la expresión de parámetro es un tipo de datos bigint. SQL Server no promueve automáticamente otros tipos de datos enteros (tinyint, smallint e int) en bigint.

 Advertencia

Cuando se utilizan los operadores aritméticos +, -, *, / o % para llevar a cabo conversiones implícitas o explícitas de valores constantes int, smallint, tinyint o bigint en tipos de datos float, real, decimal onumeric, las reglas que aplica SQL Server al calcular el tipo de datos

y la precisión de los resultados de la expresión varían dependiendo de si la consulta tiene parámetros automáticos o no.Por lo tanto, expresiones similares en las consultas pueden generar resultados diferentes. Cuando una consulta no tiene parámetros automáticos, el valor constante primero se convierte en numeric, cuya precisión es lo suficientemente grande como para conservar el valor de la constante, antes de realizar la conversión al tipo de datos especificado. Por ejemplo, el valor constante 1 se convierte en numeric (1, 0) y el valor constante 250 se convierte en numeric (3, 0).Cuando una consulta tiene parámetros automáticos, el valor constante siempre se convierte en numeric (10, 0) antes de convertirse en el tipo de datos final. Cuando se utiliza el operador /, no solo puede diferir la precisión del tipo de los resultados entre consultas similares, sino que también puede variar el valor de los resultados. Por ejemplo, el valor de los resultados de una consulta con parámetros automáticos que incluye la expresión SELECT CAST (1.0 / 7 AS float) variará con respecto a la misma consulta cuando no tenga parámetros automáticos, puesto que los resultados de la primera se truncarán para ajustarse al tipo de datosnumeric (10, 0).

Convertir datos enteros

Cuando se convierten implícitamente enteros en un tipo de datos de caracteres, si el entero es demasiado grande para ajustarse al campo de carácter, SQL Server escribe el carácter ASCII 42, el asterisco (*).Las constantes de enteros mayores que 2.147.483.647 se convierten en el tipo de datos decimal, no en el tipo de datos bigint. En el ejemplo siguiente se muestra que cuando se supera el valor de umbral, el tipo de datos del resultado cambia de int a decimal.SELECT 2147483647 / 2 AS Result1, 2147483649 / 2 AS Result2 ;El conjunto de resultados es el siguiente.Result1 Result21073741823 1073741824.500000

bit (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 4 de 4 - Valorar este tema

Tipo de datos entero que puede aceptar los valores 1, 0 o NULL.

Comentarios

Motor de base de datos de SQL Server optimiza el almacenamiento de las columnas de tipo bit. Si una tabla contiene 8 columnas o menos de tipo bit, éstas se almacenan como 1 byte. Si hay entre 9 y 16 columnas de tipobit, se almacenan como 2 bytes, y así sucesivamente.Los valores de cadena TRUE y FALSE se pueden convertir en valores de tipo bit: TRUE se convierte en 1 y FALSE en 0.La conversión a bit promueve cualquier valor distinto de cero a uno.

decimal y numeric (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 4 de 11 - Valorar este tema

Tipos de datos numéricos que tienen precisión y escala fijas.decimal [ (p[ ,s] )] y numeric[ (p[ ,s] )]

Números de precisión y escala fijas. Cuando se utiliza la precisión máxima, los valores válidos se sitúan entre - 10^38 +1 y 10^38 - 1. Los sinónimos de ISO para decimal son dec y dec(p, s). numeric es funcionalmente equivalente a decimal.

p (precisión)

El número total máximo de dígitos decimales que almacenará, tanto a la izquierda como a la derecha del separador decimal. La precisión debe ser un valor comprendido entre 1 y la precisión máxima de 38. La precisión predeterminada es 18.

s (escala)

El número de dígitos decimales que se almacenará a la derecha del separador decimal. Este número se extrae de p para determinar el número máximo de dígitos a la izquierda del separador decimal. La escala debe ser un valor comprendido entre 0 y p. Solo es posible especificar la escala si se ha especificado la precisión. La escala predeterminada es 0; por lo tanto, 0 <= s <= p. Los tamaños de almacenamiento máximo varían según la precisión.

Precisión Bytes de almacenamiento

1 - 9 5

10-19 9

20-28 13

29-38 17

Convertir datos decimal y numeric

En el caso de los tipos de datos decimal y numeric, SQL Server considera cada combinación específica de precisión y escala como un tipo de datos distinto. Por ejemplo, decimal(5,5) y decimal(5,0) se consideran tipos de datos diferentes.En las instrucciones Transact-SQL, una constante con un separador decimal se convierte automáticamente a un valor de datos numeric, con la precisión y escala mínimas necesarias. Por ejemplo, la constante 12.345 se convierte a un valor numeric con una precisión de 5 y una escala de 3.La conversión de valores decimal o numeric a valores float o real puede provocar alguna pérdida de precisión.La conversión de valores int, smallint, tinyint, float, real, money o smallmoney a valores decimal o numericpuede provocar un desbordamiento.De forma predeterminada, SQL Server usa el redondeo cuando convierte un número a un valor decimal onumeric con una precisión y una escala inferiores. Sin embargo, si la opción SET ARITHABORT está establecida en ON, SQL Server genera un error cuando se produce un desbordamiento. La pérdida de precisión y escala no es suficiente para generar un error.Cuando se conviertan valores float o reales a valores decimales o numéricos, el valor decimal nunca tendrá más de 17 decimales. Los valores float < 5E-18 se convertirán siempre en 0.

money y smallmoney (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 3 de 5 - Valorar este tema

Tipos de datos que representan valores monetarios o de moneda.

Tipo de datos

IntervaloAlmacenamiento

money De -922,337,203,685,477.5808 a 922,337,203,685,477.5807

8 bytes

smallmoney De - 214.748,3648 a 214.748,3647 4 bytes

Comentarios

Los tipos de datos money y smallmoney tienen una precisión de una diezmilésima de las unidades monetarias que representan.Use un punto para separar las unidades parciales de moneda, como céntimos, de las unidades completas de moneda. Por ejemplo, 2.15 puede especificar 2 dólares y 15 centavos.Estos tipos de datos pueden usar alguno de los siguientes símbolos de moneda.

No es necesario incluir los datos de moneda entre comillas simples ('). Es importante recordar que aunque es posible especificar valores monetarios precedidos de un

símbolo de moneda, SQL Server no almacena ninguna información de moneda asociada con el símbolo, solo almacena el valor numérico.

Convertir datos money

Cuando se convierte a money desde tipos de datos enteros, se supone que las unidades están en unidades de moneda. Por ejemplo, el valor entero 4 se convierte al equivalente money de 4 unidades monetarias.En el ejemplo siguiente se convierten valores smallmoney y money a tipos de datos varchar y decimal, respectivamente.DECLARE @mymoney_sm smallmoney = 3148.29, @mymoney money = 3148.29;SELECT CAST(@mymoney_sm AS varchar) AS 'SM_MONEY varchar', CAST(@mymoney AS decimal) AS 'MONEY DECIMAL';El conjunto de resultados es el siguiente.SM_MONEY VARCHAR MONEY DECIMAL------------------------------ ----------------------3148.29 3148 (1 row(s) affected)

float y real (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 4 de 5 - Valorar este tema

Tipos de datos numéricos y aproximados que se utilizan con datos numéricos de coma flotante. Los datos de coma flotante son aproximados; por tanto, no todos los valores del rango del tipo de datos se pueden representar con exactitud.

 Nota

El sinónimo ISO de real es el tipo float(24).

Tipo de datos

Intervalo Almacenamiento

float De - 1,79E+308 a -2,23E-308, 0 y de 2,23E-308 a 1,79E+308

Depende del valor de n.

real De - 3,40E + 38 a -1,18E - 38, 0 y de 1,18E - 38 a 3,40E + 38

4 Bytes

 Convenciones de sintaxis de Transact-SQL

Sintaxis

float [ (n) ]

Donde n es el número de bits que se utilizan para almacenar la mantisa del número float en notación científica y, por tanto, dicta su precisión y el tamaño de almacenamiento. Si se especifica n, debe ser un valor entre 1 y 53. El valor predeterminado de n es 53.

Valor del parámetro n Precisión Tamaño de almacenamiento

1-24 7 dígitos 4 bytes

25-53 15 dígitos 8 bytes

 Nota

SQL Server trata n como uno de dos valores posibles. Si 1<=n<=24, n se trata como 24. Si 25<=n<=53, n se trata como 53.

El tipo de datos float[(n)] de SQL Server cumple con el estándar ISO para todos los valores de n desde 1 hasta53. El sinónimo de double precision es el tipo float(53).

Convertir datos float y real

Los valores float se truncan cuando se convierten a cualquier tipo de entero.Cuando convierte de valores float o real a datos de carácter, suele resultar más útil la función de cadena STR que CAST( ). Esto se debe a que STR permite más control sobre el formato. Para obtener más información, veaSTR (Transact-SQL) y Funciones integradas (Transact-SQL).La conversión de los valores float que utilizan la notación científica a decimal o numeric se restringe únicamente a los valores con una precisión de 17 dígitos. Cualquier valor con una precisión mayor de 17 se redondea a cero.

date (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 4 de 5 - Valorar este tema

Define una fecha.

Descripción de date

Propiedad Valor

Sintaxis date

Uso DECLARE @MyDate dateCREATE TABLE Table1 ( Column1 date )

Formato de literal de cadena predeterminado(se usa para el cliente de nivel inferior)

AAAA-MM-DDPara obtener más información, vea la sección "Compatibilidad con versiones anteriores de los clientes de niveles inferiores" más adelante.

Intervalo De 0001-01-01 a 9999-12-31Del 1 de enero del año 1 después de Cristo al 31 de diciembre de 9999

Intervalos de elementos AAAA es una cifra de cuatro dígitos comprendida entre 0001 y 9999 que representa un año.MM es una cifra de dos dígitos comprendida entre 01 y 12 que representa un mes del año especificado.DD es una cifra de dos dígitos comprendida entre 01 y 31 dependiendo del mes, que representa un día del mes especificado.

Longitud en caracteres 10 posiciones

Precisión, escala 10, 0

Tamaño de almacenamiento

3 bytes, fijo

Estructura de almacenamiento

1, fecha de almacenes de enteros de 3 bytes.

Precisión Un día

Valor predeterminado 1900-01-01Este valor se utiliza para la parte de fecha anexada para la conversión implícita de time a datetime2 o datetimeoffset.

Calendario Gregoriano

Precisión de fracciones de segundo definida por el usuario

No

Conservación y reconocimiento del ajuste de zona horaria

No

Reconocimiento del horario de verano

No

Formatos del literales de cadena compatibles para date

En las tablas siguientes se muestran los formatos de literales de cadena válidos para el tipo de datos date.

Numérico Descripción

mda                         [m]m/dd/[aa]aa       [m]m-dd-[aa]aa       [m]m.dd.[aa]aa       mad                         mm/[aa]aa/dd       mm-[aa]aa/dd       [m]m.[aa]aa.dd       dma                         dd/[m]m/[aa]aa       

[m]m, dd, y [aa]aa representa el mes, el día y el año en una cadena con marcas de barras diagonales (/), guiones (-) o puntos (.) como separadores.Solo se admiten los años de dos o cuatro dígitos. Siempre que sea posible utilice los años de cuatro dígitos. Para especificar un número entero entre 0001 y 9999 que represente el año límite para interpretar años de dos dígitos como años de cuatro dígitos, utilice la Establecer la opción de configuración del servidor Fecha límite de año de dos dígitos.Un año de dos dígitos menor o igual que los últimos dos dígitos del año límite pertenece al mismo siglo que el año límite. En cambio, un año de

dd-[m]m-[aa]aa       dd.[m]m.[aa]aa       dam                         dd/[aa]aa/[m]m       dd-[aa]aa-[m]m       dd.[aa]aa.[m]m       amd                         [aa]aa/[m]m/dd       [aa]aa-[m]m-dd       [aa]aa-[m]m-dd       

dos dígitos mayor que los últimos dos dígitos del año límite pertenece al siglo anterior al año límite. Por ejemplo, si el valor del año límite de dos dígitos es 2049 (el valor predeterminado), el año de dos dígitos 49 se interpreta como 2049 y el año de dos dígitos 50 se interpreta como 1950.La configuración de idioma actual está determinada por el formato de fecha predeterminado. Para cambiar el formato de la fecha, utilice las instrucciones SET LANGUAGE y SET DATEFORMAT.El formato ydm no se admite para date.

Alfabético Descripción

mes [dd][,] aaaa      mes dd[,] [aa]aa      mes aaaa [dd]          [dd] mes[,] aaaa      dd mes[,][aa]aa       dd [aa]aa mes         [dd] aaaa mes         aaaa mes [dd]         aaaa [dd] mes         

mon representa el nombre completo del mes o la abreviatura del mes en el idioma actual. Las comas son opcionales y se omite el uso de mayúsculas.Para evitar la ambigüedad, use años de cuatro dígitos.Si falta el día, se usará el primer día del mes.

ISO 8601 Descripción

AAAA-MM-DD            YYYYMMDD               

Igual que el estándar SQL. Éste es el único formato que se define como una norma internacional.

Sin separación Descripción

[aa]aammdd            aaaa[mm][dd]          

Los datos de tipo date se pueden especificar con cuatro, seis u ocho dígitos. Una cadena de seis u ocho dígitos se interpreta siempre como ymd. El mes y el día deben ser siempre de dos dígitos. Una cadena de cuatro dígitos se interpreta como el año.

ODBC Descripción

{ d 'aaaa-mm-dd' }   

Específico de la API de ODBC:Funciona en SQL Server 2012 como en SQL Server 2005.

Formato W3C XML

Descripción

aaaa-mm-ddDZH      

Específicamente admitido para uso de XML/SOAP.DZH es el designador de zona horaria (Z o + hh: mm o -hh:mm).

hh:mm representa el ajuste de zona horaria. hh es una cifra de dos dígitos, de 0 a 14, que representa el número de horas del 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.

+ (más) o – (menos) es el signo que se usa obligatoriamente para indicar el ajuste de zona horaria. Indica si el ajuste de zona horaria se suma o resta de la hora universal coordinada (UTC) para obtener la hora local. El intervalo válido de ajuste de zona horaria es de -14: 00 a +14: 00.

Compatibilidad con ANSI e ISO 8601

date cumple la definición del estándar ANSI SQL para el calendario Gregoriano: "NOTA 85 - los tipos de datos datetime permitirán las fechas en el formato Gregoriano que se va a almacenar en el intervalo de fechas de 0001.01.01 CE a 9999-12-31 CE."El formato predeterminado del literal de cadena (que se usa para clientes de nivel inferior) cumple con el formato del estándar SQL, que se define como AAAA-MM-DD. Este formato es igual que la definición de ISO 8601 para DATE.

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 tipos date a otros tipos de fecha y horaEn la tabla siguiente se describe lo que ocurre cuando un tipo de datos date 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) 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 copia la fecha y el componente de hora se establece en 00:00:00.000. El código siguiente muestra los resultados de convertir un valor de date en un valor de datetime.DECLARE @date date= '12-10-25';DECLARE @datetime datetime= @date;

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

--Result--@date @datetime------------ -------------------------2025-12-10 2025-12-10 00:00:00.000----(1 row(s) affected)

smalldatetime Cuando el valor de date está en el intervalo de un valor de smalldatetime, se copia el componente de fecha y el componente de hora se establece en 00:00:00. Cuando el valordate está fuera del intervalo de un valor smalldatetime, se recibe el mensaje de error 242: "La conversión del tipo de datos date en smalldatetime produjo un valor fuera de intervalo" y el valor smalldatetime se establece en NULL.El código siguiente muestra los resultados de convertir un valor de date en un valor desmalldatetime.DECLARE @date date= '1912-10-25';DECLARE @smalldatetime smalldatetime = @date;

SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';

--Result--@date @smalldatetime------------ -------------------------1912-10-25 1912-10-25 00:00:00----(1 row(s) affected)

datetimeoffset(n) Se copia la fecha, y la hora se establece en 00:00.0000000 +00:00.El código siguiente muestra los resultados de convertir un valor de date en un valor dedatetimeoffset(3).DECLARE @date date = '1912-10-25';DECLARE @datetimeoffset datetimeoffset(3) = @date;

SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';

--Result--@date @datetimeoffset------------ --------------------------------1912-10-25 1912-10-25 00:00:00.000 +00:00----(1 row(s) affected)

datetime2(n) Se copia el componente de fecha y el componente de hora se establece en 00:00:00.00 cualquiera que sea el valor de (n).El código siguiente muestra los resultados de convertir un valor de date en un valor dedatetime2(3).DECLARE @date date = '1912-10-25';DECLARE @datetime2 datetime2(3) = @date;

SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';

--Result--@date @datetime2(3)------------ -----------------------

--1912-10-25 1912-10-25 00:00:00.00----(1 row(s) affected)

Convertir literales de cadena a dateLas 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 date.

Literal de cadena de entrada

date

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 un tipo date provocará 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 anterior de DATE de ODBC.

DATETIME DE ODBC

Vea la regla anterior de DATE de ODBC.

Solo DATE Trivial

Solo TIME Se proporcionan los valores predeterminados.

Solo TIMEZONE

Se proporcionan los valores predeterminados.

DATE + TIME Se usa la parte DATE de la cadena de entrada.

DATE + TIMEZONE

No permitido.

TIME + TIMEZONE

Se proporcionan los valores predeterminados.

DATE + TIME + TIMEZONE

Se usará la parte DATE de DATETIME local.

Ejemplos

En el ejemplo siguiente se comparan los resultados de convertir una cadena a cada tipo de datos de fecha y hora.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

Vea también

Referencia

datetime (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 2 de 4 - Valorar este tema

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

 Nota

Utilice los tipos de datos time, date, datetime2 y datetimeoffset para los nuevos trabajos. Estos tipos se alinean con el estándar SQL. Son más portátiles. time , 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

Uso DECLARE @MyDatetime datetimeCREATE TABLE Table1 ( Column1 datetime )

Formatos de literal de cadena predeterminados(se usan para el cliente de nivel inferior)

No aplicable

Intervalo de fechas Del 1 de enero de 1753 hasta el 31 de diciembre de 9999

Intervalo de horas De 00:00:00 a 23:59:59.997

Intervalo de ajuste de zona horaria

Ninguno

Intervalos de elementos 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 comprendida entre 01 y 12 que representa un mes del año especificado.DD es una cifra de dos dígitos comprendida entre 01 y 31 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.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 de los caracteres 19 posiciones como mínimo a 23 como máximo

Tamaño de almacenamiento 8 bytes

Precisión Se redondea en incrementos de 0,000, 0,003 o 0.007 segundos

Valor predeterminado 1900-01-01 00:00:00

Calendario Gregoriano (no incluye el intervalo completo de años.)

Precisión de fracciones de segundo definida por el usuario

No

Conservación y reconocimiento del ajuste de zona horaria

No

Reconocimiento del horario de verano

No

Formatos del literales de cadena compatibles para datetime

Las tablas siguientes enumeran los formatos de literales de cadena compatibles para datetime. Excepto para ODBC, los literales de cadena de datetime están incluidos entre comillas simples ('), por ejemplo 'string_literaL.' Si el entorno no es us_english, los literales de cadena deberían estar en el formato N'string_literaL'.

Numérico Descripción

Formatos de fecha:[0]4/15/[19]96 -- (mda)[0]4-15-[19]96 -- (mda)[0]4.15.[19]96 -- (mda)[0]4/[19]96/15 -- (mad)15/[0]4/[19]96 -- (dma)15/[19]96/[0]4 -- (dam)[19]96/15/[0]4 -- (adm)[19]96/[0]4/15 -- (amd)Formatos de hora:14:3014:30[:20:999]14:30[:20.9]4am4 PM

Puede especificar datos de fecha con un mes en forma de número. Por 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 una cadena con barras diagonales (/), guiones (-) o puntos (.) como separadores. Esta cadena debe aparecer de la forma siguiente:

número separador número separador number [time] [time]Cuando el idioma establecido es us_english, el orden predeterminado de la fecha es mdy (mes, día, año). Para cambiar el orden de la fecha, utilice la instrucción SET DATEFORMAT.La configuración de SET DATEFORMAT determina cómo se interpretan los valores de fecha. Si el orden no coincide con esta configuración, los valores no se interpretarán como fechas porque se encuentran fuera del intervalo, o bien se interpretarán incorrectamente. Por ejemplo, 12/10/08 se puede interpretar de seis formas distintas, en función de la configuración de DATEFORMAT. Un año en cuatro partes se interpreta como el año.

Alfabético Descripción

Abr[il] [15][,] 1996Abr[il] 15[,] [19]96Abr[il] 1996 [15][15] Abr[il][,] 199615 Abr[il][,][19]9615 [19]96 abr[il][15] 1996 abr[il]1996 ABR[IL] [15]1996 [15]

Puede especificar los datos de la fecha con un mes especificado como el nombre completo del mes. Por ejemplo, abril o la abreviatura del mes Abr especificada en el idioma actual; las comas son opcionales y se omite el uso de mayúsculas.Éstas son algunas directrices para utilizar los formatos alfabéticos de fecha:

Incluya los datos de fecha y hora entre comillas simples ('). Para los idiomas distintos de inglés, utilice N'

Los caracteres que se incluyen entre corchetes son opcionales. Si solo especifica los dos últimos dígitos del año, los valores

inferiores a los dos últimos dígitos del valor de la opción de configuración Establecer la opción de configuración del servidor Fecha límite de año de dos dígitos pertenecen al mismo siglo que el año límite.Los valores mayores o iguales que el valor de esta opción pertenecen al siglo anterior al año límite. Por ejemplo, si el valor de Fecha límite de año de dos dígitos es 2050 (el valor

ABR[IL] predeterminado), 25 se interpreta como 2025 y 50 se interpreta como 1950. Para evitar la ambigüedad, utilice años de cuatro dígitos.

Si falta el día, se usará el primer día del mes.El parámetro de sesión SET DATEFORMAT no se aplica cuando se especifica el mes de forma alfabética.

ISO 8601 Descripción

AAAA-MM-DDThh:mm:ss[.mmm]AAAMMDD[ hh:mm:ss[.mmm]]

Ejemplos: 2004-05-23T14:25:10 2004-05-23T14:25:10.487

Para utilizar el formato ISO 8601, debe especificar todos los elementos del formato.Esto también incluye T, los dos puntos (:) y el punto (.) que se muestran en el formato.Los corchetes indican que el componente de fracción de 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 del valor datetime.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. Asimismo, este formato no se ve afectado por la configuración de SET DATEFORMAT o SET LANGUAGE.

Sin separación Descripción

AAAAMMDD hh:mm:ss[.mmm]

ODBC Descripción

{ ts '1998-05-02 01:23:56.123' }{ d '1990-10-02' }{ t '13:33:41' }

La API de ODBC define secuencias de escape para representar valores de fecha y de hora que ODBC llama datos de marca de tiempo. La definición del lenguaje OLE DB (DBGUID-SQL) aceptada por el proveedor OLE DB de Microsoft para SQL Server también admite este formato de marca de tiempo de ODBC. Las aplicaciones que usan las API basadas en ODBC, OLE DB y ADO pueden usar este formato de marca de tiempo de ODBC para representar fechas y horas.Las secuencias de escape de marca de tiempo de ODBC tienen el formato: { literal_type'constant_value' }:

literal_type especifica el tipo de la secuencia de escape. Las marcas de tiempo tienen tres especificadores literal_type:

o d = solo fechao t = solo hora

o 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.

literal_type formato constant_value

d aaaa-mm-dd

t hh:mm:ss[.fff]

ts yyyy-mm-dd hh:mm:ss[.fff]

Redondeo de precisión de las fracciones de segundo de datetime

Los valores datetime se redondean con incrementos de 0,000; 0,003 o 0,007 segundos, como se muestra en la siguiente tabla.

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.99501/01/98 23:59:59.99601/01/98 23:59:59.99701/01/98 23:59:59.998

1998-01-01 23:59:59.997

01/01/98 23:59:59.99201/01/98 23:59:59.99301/01/98 23:59:59.994

1998-01-01 23:59:59.993

01/01/98 23:59:59.99001/01/98 23:59:59.991

1998-01-01 23:59:59.990

Compatibilidad con ANSI e ISO 8601

datetime no es conforme a ANSI ni a ISO 8601.

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 tipos datetime a otros tipos de fecha y horaEn la tabla siguiente se describe lo que ocurre cuando un tipo de datos datetime se convierte a otros tipos de datos de fecha y hora.

Tipo de datos al que se convierte

Detalles de la conversión

date Se copian los valores de año, mes y día. El componente de hora se establece en 00:00:00.000.El código siguiente muestra los resultados de convertir un valor de date en un valor de datetime.DECLARE @date date = '12-21-05';DECLARE @datetime datetime = @date;

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

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

time(n) Se copia el componente de hora, y el componente de fecha se establece en '1900-01-01'. Cuando la precisión de las fracciones del valor de time(n) es superior a tres dígitos, el valor se truncará para ajustarse.El ejemplo siguiente muestra los resultados de convertir un valor de time(4) en un valor dedatetime.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----(1 row(s) affected)

smalldatetime 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 smalldatetime en un valor dedatetime.DECLARE @smalldatetime smalldatetime = '12-01-01 12:32';DECLARE @datetime datetime = @smalldatetime;

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

'@smalldatetime';

--Result--@datetime @smalldatetime------------------------- -------------------------2001-12-01 12:32:00.000 2001-12-01 12:32:00----(1 row(s) affected)

datetimeoffset(n) Se copian los componentes de fecha y hora. Se trunca la zona horaria. Cuando la precisión de las fracciones del valor de datetimeoffset(n) es superior a tres dígitos, el valor se truncará.En el ejemplo siguiente se muestran los resultados de convertir un valor datetimeoffset(4) en un valor datetime.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----(1 row(s) affected)

datetime2(n) Se copian los valores de fecha y hora. Cuando la precisión de las fracciones del valor datetime2(n)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 valordatetime.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----(1 row(s) affected)

Ejemplos

En 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';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

datetimeoffset (Transact-SQL)SQL Server 2012

Otras versiones

Este tema aún no ha recibido ninguna valoración - Valorar este tema

Define una fecha que se combina con una hora del día con reconocimiento de zona horaria y basado en un reloj de 24 horas.

Descripción de datetimeoffset

Propiedad Valor

Sintaxis datetimeoffset [ (fractional seconds precision) ]

Uso DECLARE @MyDatetimeoffset datetimeoffset(7)CREATE TABLE Table1 ( Column1 datetimeoffset(7) )

Formatos de literal de cadena predeterminados (utilizados para el cliente de nivel inferior)

AAAA-MM-DD hh:mm:ss[. nnnnnnn] [{+|-}hh:mm]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 fechas De 0001-01-01 a 9999-12-31Del 1 de enero del año 1 después de Cristo al 31 de diciembre de 9999

Intervalo de horas De 00:00:00 a 23:59:59.9999999

Intervalo de ajuste de zona horaria

De -14:00 a +14:00

Intervalos de elementos

AAAA es una cifra de cuatro dígitos comprendida entre 0001 y 9999 que representa un año.

MM es una cifra de dos dígitos comprendida entre 01 y 12 que representa un mes del año especificado.DD es una cifra de dos dígitos comprendida entre 01 y 31 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.s es una cifra de dos dígitos comprendida entre 00 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.hh es una cifra de dos dígitos comprendida entre -14 y 14.mm es una cifra de dos dígitos comprendida entre 00 y 59.

Longitud de los caracteres

De 26 posiciones como mínimo (AAAA-MM-DD hh:mm:ss {+|-}hh:mm) a 34 como máximo (AAAA-MM-DD hh:mm:ss. nnnnnnn {+|-}hh:mm)

Precisión, escala

Escala especificada

Resultado (precisión, escala)

Longitud de la columna (bytes)

Precisión de fracciones de segundo

datetimeoffset

(34,7) 10 7

datetimeoffset(0)

(26,0) 8 0-2

datetimeoffset(1)

(28,1) 8 0-2

datetimeoffset(2)

(29,2) 8 0-2

datetimeoffset(3)

(30,3) 9 3-4

datetimeoffs (31,4) 9 3-4

et(4)

datetimeoffset(5)

(32,5) 10 5-7

datetimeoffset(6)

(33,6) 10 5-7

datetimeoffset(7)

(34,7) 10 5-7

Tamaño de almacenamiento

10 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

1900-01-01 00:00:00 00:00

Calendario Gregoriano

Precisión de fracciones de segundo definida por el usuario

Conservación y reconocimiento del ajuste de zona horaria

Reconocimiento del horario de verano

No

Formatos de literales de cadena admitidos para datetimeoffset

La tabla siguiente enumeran los formatos de literales de cadena ISO 8601 admitidos para datetimeoffset. Para obtener información sobre los formatos alfabético, numérico, sin separación y de hora para las partes de fecha y hora de datetimeoffset, vea date (Transact-SQL) y hora (Transact-SQL).

ISO 8601 Descripción

AAAA-MM-DDThh:mm:ss[.nnnnnnn][{+|-}hh:mm]

Estos dos formatos no se ven afectados por la configuración regional de sesión de SET LANGUAGE y SET DATEFORMAT. No se permiten espacios entre las partes datetimeoffsety datetime.

AAAA-MM-DDThh:mm:ss[.nnnnnnn]Z (UTC)

Este formato por definición de ISO indica que la parte datetime se debería expresar en Hora universal coordinada (Hora UTC). Por ejemplo, 1999-12-12 12:30:30.12345 -07: 00 se deberían representar como 1999-12-12 19:30:30.12345 Z.

Ajuste de zona horaria

El ajuste de zona horaria especifica el ajuste de zona de la Hora UTC para un valor time o datetime. El ajuste de zona horaria se puede representar como [+ | -] hh:mm:

hh es una cifra de dos dígitos comprendidos entre 00 a 14 y representa el número de horas en el ajuste de zona horaria.

mm es una cifra de dos dígitos comprendidos entre 00 a 59 y representa el número minutos adicionales en el ajuste de zona horaria.

+ (más) o – (menos) es el signo que se usa obligatoriamente para indicar un ajuste de zona horaria. Esto indica si el ajuste de zona horaria se agrega o resta de la hora UTC para obtener la hora local. El intervalo válido de ajuste de zona horaria es de -14: 00 a +14: 00.

El intervalo del ajuste de zona horaria sigue la norma de W3C XML para la definición del esquema XSD y es ligeramente diferente de la definición estándar de SQL 2003, de 12:59 a +14: 00.El parámetro de tipo opcional fractional seconds precision especifica el número de dígitos para la parte fraccionaria de los segundos. Este valor puede ser un entero con 0 a 7 (100 nanosegundos). El valor fractional seconds precision predeterminado es 100 ns (siete dígitos para la parte fraccionaria de los segundos).Los datos se almacenan en la base de datos y se procesan, comparan, ordena e indizan en el servidor como en UTC. El ajuste de zona horaria se conservará en la base de datos para la recuperación.El ajuste de zona horaria determinada se supondrá que reconoce el horario de verano (DST) y se ajustará para cualquier datetime determinado dentro del periodo DST.Para el tipo datetimeoffset, tanto el valor UTC como el valor datetime (al desplazamiento de la zona horario persistente o convertido) se validarán durante las operaciones de inserción, actualización, aritmética, conversión o asignación. La detección de cualquier valor UTC o local datetime no válido (al desplazamiento de la zona horario persistente o convertido) generará un error de valor no válido. Por ejemplo, 9999-12-31 10:10:00 son válidos en UTC, pero se desbordan en la hora local al ajuste de zona horaria +13: 50.

Compatibilidad con ANSI e ISO 8601

Las secciones de compatibilidad ANSI e ISO 8601 de los temas date y time se aplican a datetimeoffset.

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 datetimeoffset en otros tipos de fecha y horaEn la tabla siguiente se describe lo que ocurre cuando un tipo de datos datetimeoffset se convierte a otros tipos de datos de fecha y hora.

Tipo de datos al que se convierte

Detalles de la conversión

date Se copian los valores de año, mes y día.El código siguiente muestra los resultados de convertir un valor de datetimeoffset(4) en un valor dedate.DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10 +01:00';DECLARE @date date= @datetimeoffset;

SELECT @datetimeoffset AS '@datetimeoffset ', @date AS 'date';

--Result--@datetimeoffset date-------------------------------- ------------2025-12-10 12:32:10.0000 +01:0 2025-12-10----(1 row(s) affected)

time(n) Se copian los valores de hora, minuto, segundo y fracciones de segundo. Se trunca el valor de zona horaria. Cuando la precisión del valor de datetimeoffset(n) es mayor que la precisión del valor detime(n), el valor se redondea.El código siguiente muestra los resultados de convertir un valor de datetimeoffset(4) en un valor detime(3).DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10.1237 +01:0';DECLARE @time time(3) = @datetimeoffset;

SELECT @datetimeoffset AS '@datetimeoffset ', @time AS 'time';

--Result--@datetimeoffset time-------------------------------- -------------- 2025-12-10 12:32:10.1237 +01:00 12:32:10.124

----(1 row(s) affected)

datetime Se copian los valores de fecha y hora, y se trunca la zona horaria. Cuando la

precisión de las fracciones del valor de datetimeoffset(n) es superior a tres dígitos, el valor se trunca.El código siguiente muestra los resultados de convertir un valor de datetimeoffset(4) en un valor dedatetime.DECLARE @datetimeoffset datetimeoffset(4) = '12-10-25 12:32:10.1237 +01:0';DECLARE @datetime datetime = @datetimeoffset;

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

--Result--@datetimeoffset datetime-------------------------------- -------------------------2025-12-10 12:32:10.1237 +01:0 2025-12-10 12:32:10.123----(1 row(s) affected)

smalldatetime Se copian la fecha y las horas. Los minutos se redondean con respecto al valor de segundos y los segundos se establecen en 0.El código siguiente muestra los resultados de convertir un valor de datetimeoffset(3) en un valor desmalldatetime.DECLARE @datetimeoffset datetimeoffset(3) = '1912-10-25 12:24:32 +10:0';DECLARE @smalldatetime smalldatetime = @datetimeoffset;

SELECT @datetimeoffset AS '@datetimeoffset', @smalldatetime AS '@smalldatetime';

--Result--@datetimeoffset @smalldatetime-------------------------------- -------------------------1912-10-25 12:24:32.000 +10:00 1912-10-25 12:25:00----(1 row(s) affected)

datetime2(n) La fecha y la hora se copian en el valor de datetime2 y se trunca la zona horaria. Cuando la precisión del valor de datetime2(n) es mayor que la precisión del valor de datetimeoffset(n), el valor de las fracciones de segundo se trunca para ajustarse.El código siguiente muestra los resultados de convertir un valor de datetimeoffset(4) en un valor dedatetime2(3).DECLARE @datetimeoffset datetimeoffset(4) = '1912-10-25 12:24:32.1277 +10:0';DECLARE @datetime2 datetime2(3)=@datetimeoffset;

SELECT @datetimeoffset AS '@datetimeoffset', @datetime2 AS '@datetime2';

--Result@datetimeoffset @datetime2

---------------------------------- ----------------------1912-10-25 12:24:32.1277 +10:00 1912-10-25 12:24:32.12

--(1 row(s) affected)

Convertir literales de cadena a datetimeoffsetLas 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 datetimeoffset.

Literal de cadena de entrada

datetimeoffset(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 datetimeoffset provocará 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 anterior de DATE de ODBC.

DATETIME de ODBC

Vea la regla anterior de DATE de ODBC.

Solo DATE La parte de TIME tiene como valor predeterminado 00:00:00. TIMEZONE tiene como valor predeterminado +00:00.

Solo TIME La parte de DATE tiene como valor predeterminado 1900-1-1. TIMEZONE tendrá como valor predeterminado +00:00.

Solo TIMEZONE

Se proporcionan los valores predeterminados.

DATE + TIME TIMEZONE tiene como valor predeterminado +00:00.

DATE + TIMEZONE

No permitido

TIME + TIMEZONE

La parte de DATE tiene como valor predeterminado 1900-1-1.

DATE + TIME + TIMEZONE

Trivial

Ejemplos

En 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' ,CAST('2007-05-08 12:35:29.1234567+12:15' AS datetimeoffset(7)) AS 'datetimeoffset IS08601';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

smalldatetime (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 3 de 4 - Valorar este tema

Define una fecha que se combina con una hora del día. La hora está en un formato de día de 24 horas , con segundos siempre a cero (: 00) y sin fracciones de segundo.

 Nota

Use los tipos de datos time, date, datetime2 y datetimeoffset para los nuevos trabajos. Estos tipos se ajustan al estándar SQL. Son más portátiles. time , datetime2 y datetimeoffset proporcionan una mayor precisión de segundos. datetimeoffset proporciona compatibilidad de zona horaria para las aplicaciones implementadas globalmente.

Descripción de smalldatetime

Sintaxis smalldatetime

Uso DECLARE @MySmalldatetime smalldatetimeCREATE TABLE Table1 ( Column1 smalldatetime )

Formatos de literal de cadena predeterminados(se usa para el cliente de nivel inferior)

No aplicable

Intervalo de fechas De 1900-01-01 a 2079-06-06Del 1 de enero de 1900 hasta el 6 de junio de 2079

Intervalo de horas De 00:00:00 a 23:59:592007-05-09 23:59:59 se redondeará a2007-05-10 00:00:00

Intervalos de elementos AAAA es una cifra de cuatro dígitos comprendida entre 1900 y 2079 que representa un año.MM es una cifra de dos dígitos comprendida entre 01 y 12 que representa un mes del año especificado.DD es una cifra de dos dígitos comprendida entre 01 y 31 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.ss es una cifra de dos dígitos comprendida entre 00 y 59 que representa los segundos.Los valores de 29,998 segundos o menos se redondean a la baja hasta el minuto más cercano; los valores de 29,999 segundos o más se redondean al alza hasta el minuto más cercano.

Longitud en caracteres 19 posiciones como máximo

Tamaño de almacenamiento

4 bytes, fijo.

Precisión Un minuto

Valor predeterminado 1900-01-01 00:00:00

Calendario Gregoriano(no incluye el intervalo completo de años.)

Precisión de fracciones de segundo definida por el usuario

No

Conservación y reconocimiento del desplazamiento de zona horaria

No

Reconocimiento del horario de verano

No

Compatibilidad con ANSI e ISO 8601

smalldatetime no es conforme a ANSI ni a ISO 8601.

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 tipos smalldatetime a otros tipos de fecha y horaEn la tabla siguiente se describe lo que ocurre cuando un tipo de datos smalldatetime se convierte a otros tipos de datos de fecha y hora.

Tipo de datos al que se convierte

Detalles de la conversión

date Se copian los valores de año, mes y día.El código siguiente muestra los resultados de convertir un valor de smalldatetime en un valor de date.DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10';DECLARE @date date = @smalldatetime

SELECT @smalldatetime AS '@smalldatetime', @date AS 'date';

--Result--@smalldatetime date------------------------- ------------1955-12-13 12:43:00 1955-12-13----(1 row(s) affected)

time(n) Se copian los valores de hora, minuto y segundo. Las fracciones de segundo se establecen en 0.El código siguiente muestra los resultados de convertir un valor de smalldatetime en un valor detime(4).DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10';DECLARE @time time(4) = @smalldatetime;

SELECT @smalldatetime AS '@smalldatetime', @time AS 'time';

--Result--@smalldatetime time------------------------- ---------------1955-12-13 12:43:00 12:43:00.0000----(1 row(s) affected)

datetime El valor de smalldatetime se copia en el valor de datetime. Las fracciones de segundo se establecen en 0.El código siguiente muestra los resultados de convertir un valor de smalldatetime en un valor dedatetime.

DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10';DECLARE @datetime datetime = @smalldatetime;

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

--Result--@smalldatetime datetime------------------------- -------------------------1955-12-13 12:43:00 1955-12-13 12:43:00.000----(1 row(s) affected)

datetimeoffset(n) El valor de smalldatetime se copia en el valor de datetimeoffset(n). Las fracciones de segundo se establecen en 0 y el ajuste de zona horaria se establece en +00: 0.En el código siguiente se muestran los resultados de convertir un valor smalldatetime en un valordatetimeoffset(4).DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10';DECLARE @datetimeoffset datetimeoffset(4) = @smalldatetime;

SELECT @smalldatetime AS '@smalldatetime', @datetimeoffset AS 'datetimeoffset(4)';

--Result--@smalldatetime datetimeoffset(4)------------------------- --------------------------------1955-12-13 12:43:00 1955-12-13 12:43:00.0000 +00:0----(1 row(s) affected)

datetime2(n) El valor de smalldatetime se copia en el valor de datetime2(n). Las fracciones de segundo se establecen en 0.En el código siguiente se muestran los resultados de convertir un valor smalldatetime en un valordatetime2(4).DECLARE @smalldatetime smalldatetime = '1955-12-13 12:43:10';DECLARE @datetime2 datetime2(4) = @smalldatetime;

SELECT @smalldatetime AS '@smalldatetime', @datetime2 AS ' datetime2(4)';

--Result--@smalldatetime datetime2(4)------------------------- --------------------------1955-12-13 12:43:00 1955-12-13 12:43:00.0000----(1 row(s) affected)

Ejemplos

A.Convertir literales de cadena con segundos a smalldatetimeEn el ejemplo siguiente se compara la conversión de los segundos presentes en los literales de cadena asmalldatetime.SELECT CAST('2007-05-08 12:35:29' AS smalldatetime) ,CAST('2007-05-08 12:35:30' AS smalldatetime) ,CAST('2007-05-08 12:59:59.998' AS smalldatetime);

Entrada Salida

2007-05-08 12:35:29 2007-05-08 12:35:00

2007-05-08 12:35:30 2007-05-08 12:36:00

2007-05-08 12:59:59.998 2007-05-08 13:00:00

B.Comparar tipos de datos de fecha y horaEn el ejemplo siguiente se comparan los resultados de convertir una cadena a cada tipo de datos de fecha y hora.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

hora (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 1 de 4 - Valorar este tema

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 especificada

Resultado (precisión, escala)

Longitud de la columna (bytes)

Fraccionessegundosprecisión

time (16,7) 5 7

time(0) (8,0) 3 0-2

time(1) (10,1) 3 0-2

time(2) (11,2) 3 0-2

time(3) (12,3) 4 3-4

time(4) (13,4) 4 3-4

time(5) (14,5) 5 5-7

time(6) (15,6) 5 5-7

time(7) (16,7) 5 5-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:00Este 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

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:sshh: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

DBTYPE_WSTR o

Java.sql.String

Cadena o SqString

SQL_VARCHAR

DBTYPE_STR

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 redondean 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.1237';DECLARE @timeTo time(3) = @timeFrom;

SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';

--Results--time(3) time(4)

-------------- ---------------12:34:54.124 12:34:54.1237----(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.1237';DECLARE @datetime datetime= @time;SELECT @time AS '@time', @datetime AS '@datetime';

--Result--@time @datetime--------------- -------------------------12:15:04.1237 1900-01-01 12:15:04.123----(1 row(s) affected)

smalldatetime La fecha se establece en '1900-01-01', y se redondean 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.-- Shows rounding up of the minute value.DECLARE @time time(4) = '12:15:59.9999'; DECLARE @smalldatetime smalldatetime= @time;  SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';

--Result@time @smalldatetime---------------- -----------------------12:15:59.9999 1900-01-01 12:16:00----(1 row(s) affected)

-- Shows rounding up of the hour value.DECLARE @time time(4) = '12:59:59.9999'; DECLARE @smalldatetime smalldatetime= @time;

SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';@time @smalldatetime---------------- -----------------------12:59:59.9999 1900-01-01 13:00: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 detime(n) es mayor que la precisión del valor de datetimeoffset(n), el valor se redondea para ajustarse.El ejemplo siguiente muestra los resultados de convertir un valor de time(4) en un tipodatetimeoffset(3).DECLARE @time time(4) = '12:15:04.1237';DECLARE @datetimeoffset datetimeoffset(3) = @time;

SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';

--Result--@time @datetimeoffset--------------- --------------------------------12:15:04.1237 1900-01-01 12:15:04.124 +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 redondea para ajustarse.El ejemplo siguiente muestra los resultados de convertir un valor de time(4) en un valor de datetime2(2).DECLARE @time time(4) = '12:15:04.1237';DECLARE @datetime2 datetime2(3) = @time;

SELECT @datetime2 AS '@datetime2', @time AS '@time';

--Result--@datetime2 @time------------------------- ---------------1900-01-01 12:15:04.124 12:15:04.1237----(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 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

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.

char y varchar (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 5 de 7 - Valorar este tema

Son tipos de datos de cadena de longitud fija o de longitud variable.char [ ( n ) ]

Datos de cadena no Unicode de longitud fija. n define la longitud de la cadena y debe ser un valor entre 1 y 8.000. El tamaño de almacenamiento es de n bytes. El sinónimo de char en ISO es character.

varchar [ ( n | max ) ]

Datos de cadena no Unicode de longitud variable. n define la longitud de la cadena y puede ser un valor entre 1 y 8.000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes (2 GB). El tamaño de almacenamiento es la longitud real de los datos especificados + 2 bytes. Los sinónimos ISO de varcharson char varying o character varying.

Comentarios

Cuando no se especifica n en una instrucción de definición de datos o declaración de variable, la longitud predeterminada es 1. Cuando no se especifica n al utilizar las funciones CAST y CONVERT, la longitud predeterminada es 30.A los objetos que utilizan char o varchar se les asigna la intercalación predeterminada de la base de datos, a menos que se asigne una intercalación específica mediante la cláusula COLLATE. La intercalación controla la página de códigos utilizada para almacenar los datos de caracteres.Si tiene sitios que admiten varios idiomas, considere el uso de tipos de datos Unicode nchar o nvarchar para reducir al mínimo los problemas de conversión de caracteres. Si usa char o varchar, siga estas recomendaciones:

Utilice char cuando los tamaños de las entradas de datos de columna sean consistentes.

Utilice varchar cuando los tamaños de las entradas de datos de columna varíen de forma considerable.

Utilice varchar(max) cuando los tamaños de las entradas de datos de columna varíen de forma considerable y se pudieran superar los 8.000 bytes.

Si SET ANSI_PADDING es OFF cuando se ejecuta CREATE TABLE o ALTER TABLE, una columna de tipo char definida como NULL se trata como si fuera de tipo varchar.Si la página de códigos de la intercalación utiliza caracteres de doble byte, el tamaño de almacenamiento sigue siendo de n bytes. Dependiendo de la cadena de caracteres, el tamaño de almacenamiento de n bytes puede ser inferior a n caracteres.

Convertir datos de caracteres

Cuando se convierten expresiones de caracteres a un tipo de datos de caracteres de un tamaño distinto, se truncan los valores que son demasiado grandes para el nuevo tipo de datos. El tipo uniqueidentifier se considera un tipo de carácter para la conversión desde una expresión de caracteres y, por tanto, está sujeto a las reglas de truncamiento para la conversión a un tipo de carácter. Vea la sección Ejemplos que aparece más adelante.Cuando una expresión de caracteres se convierte a una expresión de caracteres de un tipo de datos o tamaño distinto (como de char(5) a varchar(5) o de char(20) a char(15)), se asigna la intercalación del valor de entrada al valor convertido. Si una expresión que no es de carácter se convierte a un tipo de datos de carácter, se asigna al valor convertido la intercalación predeterminada de la base de datos actual. En cualquiera de los casos, puede asignar una intercalación específica mediante la cláusula COLLATE.

 Nota

Las traducciones de páginas de códigos se admiten para los tipos de datos char y varchar, pero no para el tipo de datos text. Al igual que en versiones anteriores de SQL Server, las pérdidas de datos durante las conversiones de la página de códigos no se notifican.

Las expresiones de carácter que se convierten a un tipo de datos numeric aproximado pueden incluir una notación exponencial opcional (una e minúscula o una E mayúscula seguida de un signo más (+) o menos (-) opcional y un número).Las expresiones de carácter que se convierten a un tipo de datos numeric exacto se componen de dígitos, un separador decimal y un signo más (+) o menos (-) opcional. Los espacios en blanco iniciales se omiten. En la cadena no se permiten los separadores de coma (como el separador de miles en algunas representaciones de 123,456.00).Las expresiones de caracteres que se convierten a los tipos de datos money o smallmoney pueden incluir también un separador decimal opcional y un símbolo de dólar ($). Los separadores de coma (por ejemplo, $123,456.00) están permitidos.

Ejemplos

A.Mostrar el valor predeterminado de n cuando se usa en una declaración de variable.En el ejemplo siguiente se muestra que el valor predeterminado de n es 1 para los tipos de datos char yvarchar cuando se utilizan en una declaración de variable.DECLARE @myVariable AS varchar = 'abc';DECLARE @myNextVariable AS char = 'abc';--The following returns 1SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable);GOB.Mostrar el valor predeterminado de n cuando varchar se usa con CAST y CONVERT.En el ejemplo siguiente se muestra que el valor predeterminado de n es 30 cuando se usa el tipo de datos charo varchar con las funciones CAST y CONVERT.DECLARE @myVariable AS varchar(40);SET @myVariable = 'This string is longer than thirty characters';SELECT CAST(@myVariable AS varchar);SELECT DATALENGTH(CAST(@myVariable AS varchar)) AS 'VarcharDefaultLength';SELECT CONVERT(char, @myVariable);SELECT DATALENGTH(CONVERT(char, @myVariable)) AS 'VarcharDefaultLength';C.Convertir datos para mostrarlosEn el ejemplo siguiente se convierten dos columnas a tipos de caracteres y se aplica un estilo que aplica un formato concreto a los datos mostrados. Un tipo money se convierte en datos de caracteres y se aplica el estilo 1, que muestra los valores con comas cada tres dígitos a la izquierda del separador decimal y dos dígitos a la derecha del separador decimal. Un tipo datetime se convierte en datos de caracteres y se aplica el estilo 3, que muestra los datos en el formato dd/mm/aa. En la cláusula WHERE, un tipo money se convierte en un tipo de caracteres para realizar una operación de comparación de cadenas.USE AdventureWorks2012;GOSELECT BusinessEntityID, SalesYTD, CONVERT (varchar(12),SalesYTD,1) AS MoneyDisplayStyle1, GETDATE() AS CurrentDate, CONVERT(varchar(12), GETDATE(), 3) AS DateDisplayStyle3FROM Sales.SalesPersonWHERE CAST(SalesYTD AS varchar(20) ) LIKE '1%';El conjunto de resultados es el siguiente.BusinessEntityID SalesYTD DisplayFormat CurrentDate DisplayDateFormat---------------- --------------------- ------------- ----------------------- -----------------278 1453719.4653 1,453,719.47 2011-05-07 14:29:01.193 07/05/11280 1352577.1325 1,352,577.13 2011-05-07 14:29:01.193 07/05/11283 1573012.9383 1,573,012.94 2011-05-07 14:29:01.193 07/05/11

284 1576562.1966 1,576,562.20 2011-05-07 14:29:01.193 07/05/11285 172524.4512 172,524.45 2011-05-07 14:29:01.193 07/05/11286 1421810.9242 1,421,810.92 2011-05-07 14:29:01.193 07/05/11288 1827066.7118 1,827,066.71 2011-05-07 14:29:01.193 07/05/11D.Convertir datos UniqueidentifierEn el ejemplo siguiente se convierte un valor uniqueidentifier a un tipo de datos char.DECLARE @myid uniqueidentifier = NEWID();SELECT CONVERT(char(255), @myid) AS 'char';En el ejemplo siguiente se muestra el truncamiento de los datos cuando el valor es demasiado largo para el tipo de datos al que se va a convertir. Puesto que el tipo uniqueidentifier está limitado a 36 caracteres, se truncan los caracteres que superan esa longitud.DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue;El conjunto de resultados es el siguiente.String TruncatedValue-------------------------------------------- ------------------------------------0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong 0E984725-C51C-4BF4-9960-E1C80E27ABA0

(1 row(s) affected)

ntext, text e image (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 2 de 4 - Valorar este tema

 Importante

Los tipos de datos ntext, text e image se quitarán en una versión futura de Microsoft SQL

Server. Evite su uso en nuevos trabajos de desarrollo y piense en modificar las aplicaciones que los usan actualmente. Utilicenvarchar(max), varchar(max) y varbinary(max) en su lugar.Tipos de datos de longitud fija y variable para almacenar valores de gran tamaño con datos de caracteres y binarios Unicode y no Unicode. Los datos Unicode utilizan el juego de caracteres UNICODE UCS-2.

ntext

Datos Unicode de longitud variable con una longitud máxima de cadena de 2^30 - 1 (1.073.741.823) bytes. El tamaño de almacenamiento, en bytes, es dos veces la longitud de cadena especificada. El sinónimo de ntexten ISO es national text.

text

Datos no Unicode de longitud variable en la página de códigos del servidor y con una longitud máxima de cadena de 2^31-1 (2.147.483.647). Cuando la página de códigos del servidor utiliza caracteres de doble byte, el almacenamiento sigue siendo de 2.147.483.647 bytes. Dependiendo de la cadena de caracteres, el espacio de almacenamiento puede ser inferior a 2.147.483.647 bytes.

image

Datos binarios de longitud variable desde 0 hasta 2^31-1 (2.147.483.647) bytes.

Comentarios

Las siguientes funciones e instrucciones se pueden utilizar con datos de tipo ntext, text o image.

Funciones Instrucciones

DATALENGTH (Transact-SQL) READTEXT (Transact-SQL)

PATINDEX (Transact-SQL) SET TEXTSIZE (Transact-SQL)

SUBSTRING (Transact-SQL) UPDATETEXT (Transact-SQL)

TEXTPTR (Transact-SQL) WRITETEXT (Transact-SQL)

TEXTVALID (Transact-SQL)  

Vea también

nchar y nvarchar (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 2 de 2 - Valorar este tema

Tipos de datos character que son bien de longitud fija, nchar, o bien de longitud variable, nvarchar, datos Unicode y usan el conjunto de caracteres UNICODE UCS-2.nchar [ ( n ) ]

Datos de cadena Unicode de longitud fija. n define la longitud de la cadena y debe ser un valor entre 1 y 4.000. El tamaño de almacenamiento es dos veces n bytes. Si la página de códigos de la intercalación utiliza caracteres de doble byte, el tamaño de almacenamiento sigue siendo de n bytes. Dependiendo de la cadena, el tamaño de almacenamiento de n bytes puede ser inferior al valor especificado para n. Los sinónimos ISO de nchar son national char y national character..

nvarchar [ ( n | max ) ]

Datos de cadena Unicode de longitud variable. n define la longitud de la cadena y puede ser un valor entre 1 y 4.000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes (2 GB). El tamaño de almacenamiento, en bytes, es dos veces la longitud real de los datos especificados + 2 bytes. Los sinónimos ISO de nvarchar son national char varying y national character varying.

Comentarios

Cuando no se especifica n en una instrucción de definición de datos o declaración de variable, la longitud predeterminada es 1. Cuando no se especifica n con la función CAST, la longitud predeterminada es 30.Use nchar cuando sea probable que el tamaño de las entradas de datos de las columnas sea similar.Use nvarchar cuando sea probable que el tamaño de las entradas de datos de las columnas varíe.sysname es un tipo de datos definido por el usuario y suministrado por el sistema que es funcionalmente equivalente a nvarchar(128), excepto que no acepta valores NULL. sysname se usa para hacer referencia a nombres de objetos de base de datos.

Los objetos que utilizan nchar o nvarchar se asignan a la intercalación predeterminada de la base de datos, a menos que se asigne una intercalación específica por medio de la cláusula COLLATE.SET ANSI_PADDING siempre es ON para nchar y nvarchar. SET ANSI_PADDING OFF no se aplica a los tipos de datos nchar ni nvarchar.

Convertir datos de caracteres

Para obtener información acerca de cómo convertir datos de caracteres, vea char y varchar (Transact-SQL).

binary y varbinary (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 1 de 1 - Valorar este tema

Tipos de datos binarios de longitud fija o variable.binary [ ( n ) ]

Datos binarios de longitud fija con una longitud de n bytes, donde n es un valor que oscila entre 1 y 8.000. El tamaño de almacenamiento es de n bytes.

varbinary [ ( n | max) ]

Datos binarios de longitud variable. n puede ser un valor de 1 a 8.000. max indica que el tamaño máximo de almacenamiento es de 2^31-1 bytes. El tamaño de almacenamiento es la longitud real de los datos especificados + 2 bytes. Los datos especificados pueden tener una longitud de 0 bytes. El sinónimo de ANSI SQL para varbinary es binary varying.

Comentarios

Cuando no se especifica el argumento n en una instrucción de definición de datos o de declaración de variable, la longitud predeterminada es 1. Cuando no se especifica n con la función CAST, la longitud predeterminada es 30.Utilice binary cuando los tamaños de las entradas de datos de columna sean coherentes.Use varbinary cuando los tamaños de las entradas de datos de columna varíen considerablemente.Use varbinary(max) cuando las entradas de datos de columna superen los 8.000 bytes.

Convertir datos binary y varbinary

Cuando se convierten datos de un tipo de datos de cadena (char, varchar, nchar, nvarchar, binary, varbinary,text, ntext o image) a un tipo de datos binary o varbinary de diferente longitud, SQL Server rellena o trunca los datos de la derecha. Cuando se convierten a binary o varbinary otros tipos de datos, los datos se rellenan o se truncan por la izquierda. El relleno se realiza con ceros hexadecimales.

La conversión de datos a tipos de datos binary y varbinary es útil si el dato binary es la forma más sencilla de mover datos. Cuando se convierte un valor de cualquier tipo a un valor binario de tamaño suficiente y, a continuación, se convierte de nuevo al tipo original, el resultado será el mismo valor si ambas conversiones utilizan la misma versión de SQL Server. La representación binaria de un valor puede cambiar entre versiones de SQL Server.Puede convertir tipos de datos int, smallint y tinyint a binary o varbinary, pero si convierte de nuevo el valorbinary a un valor entero, este será distinto del valor entero original si se ha producido un truncamiento. Por ejemplo, la siguiente instrucción SELECT muestra que el valor entero 123456 se almacena normalmente como un valor 0x0001e240 binario:SELECT CAST( 123456 AS BINARY(4) );Sin embargo, en la siguiente instrucción SELECT se muestra que, si el destino de tipo binary es demasiado pequeño para contener el valor completo, los dígitos a la izquierda se truncarán sin avisar; de esta forma, el mismo número se almacena como 0xe240:SELECT CAST( 123456 AS BINARY(2) );El siguiente lote muestra que este truncamiento puede afectar a las operaciones aritméticas sin generar un error:DECLARE @BinaryVariable2 BINARY(2);

SET @BinaryVariable2 = 123456;SET @BinaryVariable2 = @BinaryVariable2 + 1;

SELECT CAST( @BinaryVariable2 AS INT);GOEl resultado final es 57921 y no 123457.

Nota

No se garantiza que las conversiones entre cualquier tipo de datos y los tipos de datos binary sean las mismas entre diferentes versiones de SQL Server.

Vea también

ReferenciaCAST y CONVERT (Transact-SQL)

Tipos de datos (Transact-SQL)

ConceptosConversiones de tipos de datos (motor de base de datos)

¿Te ha resultado útil?  Sí  No

Adiciones de comunidad

cursor (Transact-SQL)SQL Server 2012

Otras versiones

Este tema aún no ha recibido ninguna valoración - Valorar este tema

Un tipo de datos para las variables o para los parámetros de resultado de los procedimientos almacenados que contiene una referencia a un cursor. Las variables creadas con el tipo de datos cursor aceptan NULL.Las operaciones a las que pueden hacer referencia las variables y parámetros que tienen un tipo de datos cursorson:

Las instrucciones DECLARE @local_variable y SET @local_variable. Las instrucciones del cursor OPEN, FETCH, CLOSE y DEALLOCATE. Los parámetros de resultado de procedimientos almacenados. La función CURSOR_STATUS. Los procedimientos almacenados del

sistema sp_cursor_list, sp_describe_cursor, sp_describe_cursor_tablesy sp_describe_cursor_columns.

 Importante

El tipo de datos cursor no se puede utilizar para una columna en una instrucción CREATE TABLE.

 Nota

En esta versión de SQL Server, la columna de salida cursor_name de sp_cursor_list y sp_describe_cursordevuelve el nombre de la variable de cursor. En versiones anteriores, esta columna de resultado devuelve un nombre generado por el sistema.

Vea también

ReferenciaCAST y CONVERT (Transact-SQL)

CURSOR_STATUS (Transact-SQL)

Tipos de datos (Transact-SQL)

DECLARE CURSOR (Transact-SQL)

DECLARE @local_variable (Transact-SQL)

SET @local_variable (Transact-SQL)

ConceptosConversiones de tipos de datos (motor de b

hierarchyid (Transact-SQL)SQL Server 2012

Otras versiones

Este tema aún no ha recibido ninguna valoración - Valorar este tema

El tipo de datos del sistema de hierarchyid es de longitud variable. Use hierarchyid para representar la posición en una jerarquía. Una columna de tipo hierarchyid no representa automáticamente un árbol. Dependerá de la aplicación generar y asignar los valores hierarchyid de tal forma que la relación deseada entre las filas se refleje en los valores.Un valor del tipo de datos hierarchyid representa una posición en una jerarquía de árbol. Los valores dehierarchyid tienen las siguientes propiedades.

Muy compactosEl número medio de bits necesarios para representar un nodo en un árbol con n nodos depende del promedio de nodos secundarios (el promedio de elementos secundarios de un nodo). Para multiplicadores de salida pequeños (0-7), el tamaño es aproximadamente 6*logAn bits, donde A es el promedio de nodos secundarios. Un nodo en una jerarquía organizativa de 100.000 personas con un promedio de nodos secundarios de 6 niveles supone aproximadamente 38 bits. Esto se redondea a 40 bits (o 5 bytes) para el almacenamiento.

La comparación se realiza con prioridad a la profundidadDados dos valores hierarchyid a y b, a<b quiere decir que a viene antes que b en un corte transversal de prioridad a la profundidad del árbol. Los índices de los tipos de datos hierarchyid están en orden con prioridad a la profundidad y los nodos cercanos entre sí en un corte transversal de prioridad a la profundidad se almacenan casi uno junto a otro. Por ejemplo, los elementos secundarios de un registro se almacenan adyacentes a ese registro. Para obtener más información, consulte Datos jerárquicos (SQL Server).

Compatibilidad con inserciones y eliminaciones arbitrariasCon el método GetDescendant siempre es posible generar un miembro del mismo nivel a la derecha de cualquier nodo determinado, a la izquierda de cualquier nodo determinado, o entre dos miembros cualesquiera del mismo nivel. Se mantiene la propiedad comparison cuando se inserta o elimina un número arbitrario de nodos de la jerarquía. La mayoría de las inserciones y eliminaciones conservan la propiedad compactness. Sin embargo, las inserciones entre dos nodos generarán valores hierarchyid con una representación ligeramente menos compacta.

La codificación usada en el tipo hierarchyid está limitada a 892 bytes. Por consiguiente, el tipo hierarchyidno podrá representar los nodos con demasiados niveles en su representación como para caber en los 892 bytes.

El tipo hierarchyid está disponible para los clientes CLR como el tipo de datos SqlHierarchyId.

Comentarios

El tipo hierarchyid codifica lógicamente la información de un nodo único en un árbol de jerarquía mediante la codificación de la ruta de acceso desde la raíz del árbol hasta el nodo. Este tipo de ruta de acceso se representa lógicamente como una secuencia de etiquetas de nodo de todos los elementos secundarios visitados después de la raíz. Una barra diagonal inicia la representación y una barra diagonal única representa una ruta de acceso que solo visita la raíz. Para los niveles por debajo de la raíz, cada etiqueta se codifica como una secuencia de enteros separados por puntos. La comparación entre los elementos secundarios se realiza comparando las secuencias de enteros separados por puntos en orden alfabético. Una barra diagonal termina cada nivel. Por consiguiente, una barra diagonal separa los elementos primarios de los secundarios. Por ejemplo, los niveles de las siguientes rutas de acceso hierarchyid son 1, 2, 2, 3 y 3, respectivamente:

/ /1/ /0.3.-7/ /1/3/ /0.1/0.2/

Pueden insertarse los nodos en cualquier ubicación. Los nodos insertados después de /1/2/ pero antes de /1/3/pueden representarse como /1/2.5/. Los nodos insertados antes de 0 tienen la representación lógica de un número negativo. Por ejemplo, un nodo que viene antes de /1/1/ puede representarse como /1/-1/. Los nodos no pueden tener ceros a la izquierda. Por ejemplo, /1/1.1/ es válido, pero /1/1.01/ no lo es. Para evitar errores, inserte los nodos utilizando el método GetDescendant.

Conversión de tipo de datos

El tipo de datos hierarchyid puede convertirse a otros tipos de datos de la siguiente manera:

Use el método ToString() para convertir el valor hierarchyid a la representación lógica como un tipo de datos nvarchar(4000).

Use Read () y Write () para convertir hierarchyid a varbinary. No se admite la conversión desde hierarchyid a XML. Para transmitir los

parámetros hierarchyid a través de SOAP, conviértalos previamente a cadenas. Se producirá un error en una consulta con la cláusula FOR XML en una tabla con hierarchyid a menos que la columna se convierta previamente en un tipo de datos carácter.

Actualizar bases de datos

Cuando se actualiza una base de datos a SQL Server 2012, se instalarán automáticamente el nuevo ensamblado y el tipo de datos hierarchyid. Las reglas de

asesor de actualizaciones detectan tipos de usuario o ensamblados con nombres problemáticos. El asesor de actualizaciones aconsejará el cambio de nombre de los ensamblados problemáticos, y el cambio de nombre de los tipos problemáticos o la utilización de nombres de dos partes en el código para hacer referencia al tipo de usuario preexistente.Si una actualización de la base de datos detecta un ensamblado del usuario con un nombre problemático, cambiará automáticamente el nombre del ensamblado y colocará la base de datos en modo sospechoso.Si durante la actualización se encuentra un tipo de usuario con un nombre problemático, no se llevará a cabo ningún procedimiento especial. Después de la actualización, existirán tanto el tipo de usuario anterior como el nuevo tipo de sistema. El tipo de usuario solo estará disponible a través de nombres de dos partes.

Usar columnas hierarchyid en tablas replicadas

Las columnas de tipo hierarchyid pueden usarse en cualquier tipo de tabla replicada. Los requisitos para su aplicación dependen de si la replicación es unidireccional o bidireccional, y de las versiones de SQL Server usadas.Replicación unidireccionalLa replicación unidireccional incluye la replicación de instantáneas, replicación transaccional y replicación de mezcla en las que las modificaciones no se realizan en el suscriptor. El funcionamiento de las columnashierachyid con la replicación unidireccional depende de la versión de SQL Server que el suscriptor está ejecutando.

Un publicador de SQL Server 2012 puede replicar las columnas hierachyid a un suscriptor SQL Server 2012 sin ninguna consideración especial.

Un publicador de SQL Server 2012 debe convertir las columnas hierarchyid para replicarlas a un suscriptor que esté ejecutando SQL Server Compact o una versión anterior de SQL Server. SQL Server Compact y las versiones anteriores de SQL Server no admiten columnas de tipo hierarchyid. Si está usando una de estas versiones, todavía puede replicar los datos a un suscriptor. Para ello, debe establecer una opción de esquema o el nivel de compatibilidad de la publicación (para la replicación de mezcla) de modo que la columna se pueda convertir en un tipo de datos compatible.

Se admite el filtrado de columnas en ambos escenarios. Esto incluye el filtrado de las columnas hierarchyid. Se admite el filtrado de filas con tal de que el filtro no incluya una columna hierarchyid.Replicación bidireccionalLa replicación bidireccional incluye la replicación transaccional con suscripciones de actualización, replicación transaccional del mismo nivel y replicación de mezcla en la que se realizan los cambios en el suscriptor. La replicación le permite configurar una tabla con columnas hierarchyid para la replicación bidireccional. Tenga en cuenta los siguientes requisitos y consideraciones.

El publicador y todos los suscriptores deben ejecutar SQL Server 2012. La replicación replica los datos como bytes y no realiza ninguna validación para

garantizar la integridad de la jerarquía. No se mantiene la jerarquía de las modificaciones realizadas en el origen

(suscriptor o publicador) cuando se replican en el destino.

Los valores hash de las columnas hierarchyid son específicos de la base de datos en la que se generan.Por consiguiente, se pudo generar el mismo valor en el publicador y suscriptor, pero se pudo aplicar a filas diferentes. La replicación no comprueba esta condición y, a diferencia de las columnas IDENTITY, no hay ningún medio integrado de particionar los valores de la columna hierarchyid. Las aplicaciones deben usar restricciones u otros mecanismos para evitar estos conflictos sin detectar.

Es posible que las filas insertadas en el suscriptor sean huérfanas. Es posible que la fila primaria de la fila insertada se haya eliminado en el publicador. Esto producirá un conflicto sin detectar cuando la fila del suscriptor se inserte en el publicador.

Los filtros de columnas no pueden filtrar las columnas hierarchyid que no admiten valores NULL: la operación de inserción desde el suscriptor generará un error porque no hay ningún valor predeterminado de la columna hierarchyid en el publicador.

Se admite el filtrado de filas con tal de que el filtro no incluya una columna hierarchyid.

Vea también

ConceptosDatos jerárquicos (SQL Server)

Referencia de los métodos del tipo de datos hierarchyid

sql_variant (Transact-SQL)SQL Server 2012

Otras versiones

Este tema aún no ha recibido ninguna valoración - Valorar este tema

Tipo de datos que almacena valores de varios tipos de datos admitidos en SQL Server. Convenciones de sintaxis de Transact-SQL

Sintaxis

sql_variant

Comentarios

sql_variant puede usarse en columnas, parámetros, variables y valores devueltos de funciones definidas por el usuario. sql_variant permite que estos objetos de base de datos admitan valores de otros tipos de datos.Una columna de tipo sql_variant puede contener filas de tipos de datos diferentes. Por ejemplo, una columna definida como sql_variant puede almacenar valores int, binary y char. En la tabla siguiente se muestran los tipos de valores que no se pueden almacenar mediante sql_variant:

varchar(max) varbinary(max)

nvarchar(max) xml

text ntext

image rowversion (timestamp)

sql_variant geography

hierarchyid geometry

Tipos definidos por el usuario datetimeoffset

sql_variant puede tener una longitud máxima de 8.016 bytes. Esto incluye la información y el valor de tipo base.La longitud máxima del tipo base real es 8.000 bytes.

Un tipo de datos sql_variant debe convertirse en su valor de tipo de datos base antes de poder tomar parte en operaciones como la adición y la sustracción.Se puede asignar un valor predeterminado a sql_variant. Este tipo de datos también puede incluir NULL como valor subyacente, aunque estos valores NULL no dispondrán de un tipo base asociado. Además, sql_variant no puede tener otro sql_variant como su tipo base.Una clave única, primaria o externa puede incluir columnas del tipo sql_variant, aunque la longitud total de los valores de datos que integran la clave de una fila determinada no debe superar la longitud máxima de un índice.Ésta es de 900 bytes.Una tabla puede constar de cualquier número de columnas sql_variant.No se puede utilizar sql_variant en CONTAINSTABLE y FREETEXTTABLE.ODBC no es totalmente compatible con sql_variant. Por tanto, las columnas de consultas sql_variant se devuelven como datos binarios con el proveedor OLE DB de Microsoft para ODBC (MSDASQL). Por ejemplo, una columna sql_variant que contiene los datos de la cadena de caracteres 'PS2091' se devuelve como 0x505332303931.

Comparar los valores de sql_variant

El tipo de datos sql_variant pertenece a la parte superior de la lista de jerarquías de tipos de datos para conversión. En las comparaciones de sql_variant, el orden de la jerarquía del tipo de datos SQL Server se agrupa en familias de tipos de datos.

Jerarquía de tipo de datos Familia de tipo de datos

sql_variant sql_variant

datetime2 Fecha y hora

datetimeoffset Fecha y hora

datetime Fecha y hora

smalldatetime Fecha y hora

date Fecha y hora

time Fecha y hora

float Valor numérico aproximado

real Valor numérico aproximado

decimal Valor numérico exacto

money Valor numérico exacto

smallmoney Valor numérico exacto

bigint Valor numérico exacto

int Valor numérico exacto

smallint Valor numérico exacto

tinyint Valor numérico exacto

bit Valor numérico exacto

nvarchar Unicode

nchar Unicode

varchar Unicode

char Unicode

varbinary Binary

binary Binary

uniqueidentifier Uniqueidentifier

Las comparaciones de sql_variant siguen estas reglas: Cuando se comparan valores sql_variant de tipos de datos base distintos y los

tipos de datos base están en familias de tipos de datos diferentes, el valor cuya familia de tipo de datos ocupa una posición superior en el gráfico de jerarquía se considera el mayor de los dos valores.

Cuando se comparan valores sql_variant de tipos de datos base distintos y los tipos de datos base están en la misma familia de tipos de datos, el valor cuyo tipo de datos base ocupa una posición inferior en el gráfico de jerarquía se convierte implícitamente al otro tipo de datos y, a continuación, se realiza la comparación.

Cuando se comparan valores sql_variant de los tipos de datos char, varchar, nchar o nvarchar, en primer lugar se comparan sus intercalaciones por los siguientes criterios: LCID, versión de LCID, marcas de comparación e Id. de orden. Cada uno de estos criterios se compara como valores enteros y en el orden enumerado. Si todos estos criterios son iguales, se comparan los valores reales de las cadenas según la intercalación.

Convertir datos sql_variant

Cuando se usa el tipo de datos sql_variant, SQL Server admite las conversiones implícitas de objetos con otros tipos de datos al tipo sql_variant. No obstante, SQL Server no admite conversiones implícitas de datossql_variant a un objeto con otro tipo de datos.

Vea también

ReferenciaCAST y CONVERT (Transact-SQL)

SQL_VARIANT_PROPERTY (Transact-SQL)

¿Te ha resultado útil?  Sí  No

table (Transact-SQL)SQL Server 2012

Otras versiones

Personas que lo han encontrado útil: 1 de 2 - Valorar este tema

Es un tipo de datos especial que se puede utilizar para almacenar un conjunto de resultados para procesar en otro momento. table se utiliza sobre todo para el almacenamiento temporal de un conjunto de filas vueltas como el conjunto de resultados de una función con valores de tabla. Las funciones y las variables se pueden declarar como del tipo table. Las variables table se pueden utilizar en funciones, procedimientos almacenados y lotes. Para declarar variables de tipo table, utilice DECLARE @local_variable. Convenciones de sintaxis de Transact-SQL

Sintaxis

table_type_definition ::=     TABLE ( { <column_definition> | <table_constraint> } [ ,...n ] )

<column_definition> ::=     column_name scalar_data_type     [ COLLATE <collation_definition> ]     [ [ DEFAULT constant_expression ] | IDENTITY [ ( seed , increment ) ] ]     [ ROWGUIDCOL ]     [ column_constraint ] [ ...n ]

<column_constraint> ::=     { [ NULL | NOT NULL ]     | [ PRIMARY KEY | UNIQUE ]     | CHECK ( logical_expression )     }

<table_constraint> ::=      { { PRIMARY KEY | UNIQUE } ( column_name [ ,...n ] )     | CHECK ( logical_expression )      }

Argumentos

table_type_definition

Es el mismo subconjunto de información que se utiliza para definir una tabla en CREATE TABLE. La declaración de tabla incluye definiciones de columna, nombres, tipos de datos y restricciones. Solo se permiten los tipos de restricciones PRIMARY KEY, UNIQUE KEY y NULL.Para obtener más información acerca de la sintaxis, vea CREATE TABLE (Transact-SQL), CREATE FUNCTION (Transact-SQL) y DECLARE @local_variable (Transact-SQL).

collation_definition

Es la intercalación de la columna que consiste en una configuración regional de Microsoft Windows y un estilo de comparación, una configuración regional de Windows y la notación binaria o una intercalación de Microsoft SQL Server. Si no se especifica collation_definition, la columna hereda la intercalación de la base de datos actual. Si la columna se ha definido como un tipo definido por el usuario CLR (Common Language Runtime), la columna hereda la intercalación del tipo definido por el usuario.

Observaciones generales

Se puede hacer referencia a las variables table por nombre en la cláusula FROM de un lote, según se muestra en el siguiente ejemplo:SELECT Employee_ID, Department_ID FROM @MyTableVar;Fuera de una cláusula FROM, se debe hacer referencia a las variables table mediante un alias, según se muestra en el siguiente ejemplo:SELECT EmployeeID, DepartmentID FROM @MyTableVar mJOIN Employee on (m.EmployeeID =Employee.EmployeeID AND m.DepartmentID = Employee.DepartmentID);Las variables table proporcionan las siguientes ventajas para las consultas a pequeña escala que tienen planes de consulta invariables y cuando la recompilación es un tema importante:

Una variable table se comporta como una variable local. Tiene un ámbito bien definido. Dicho ámbito es la función, el procedimiento almacenado o el lote en que se declara.Dentro de su ámbito, la variable table se puede utilizar como una tabla normal. Puede aplicarse en cualquier lugar de las instrucciones SELECT, INSERT, UPDATE y DELETE donde se utilice una tabla o expresión de tabla. Como excepción, table no puede utilizarse en la siguiente instrucción:SELECT select_list INTO table_variable;Las variables table se limpian automáticamente al final de la función, procedimiento almacenado o lote en que están definidas.

Las variables table usadas en procedimientos almacenados causan menos recompilaciones de procedimientos almacenados que cuando se usan tablas temporales, cuando no hay opciones basadas en costo que afecten al rendimiento.

Las transacciones con variables table existen solo mientras dura una actualización en la variable table. Por tanto, las variables table requieren menos recursos de registro y bloqueo.

Limitaciones y restricciones

Las variables Table si no disponen de estadísticas de distribución, no desencadenarán recompilaciones. Por tanto, en muchos casos, el optimizador generará un programa de consultas basándose en que la variable table no tiene filas. Por este motivo, las variables table deben usarse con precaución si se espera una gran cantidad de filas (más de 100). En estos casos, las tablas Temp pueden representar una mejor solución. Por otra parte, para las consultas que se unen a la variable table con otras tablas, puede utilizar la sugerencia RECOMPILE, que hará que el optimizador use la cardinalidad correcta para la variable table.Las variables table no se admiten en el modelo de razonamiento basado en costos del optimizador de SQL Server. Por lo tanto, no se deben usar cuando se requieren opciones basadas en costos para lograr un plan de consultas eficaz. Se prefieren las tablas temporales cuando se requieren opciones basadas en costos. Esto incluye normalmente consultas con uniones, decisiones de paralelismo y opciones de selección de índice.Las consultas que modifican variables table no generan planes de ejecución de consultas en paralelo. El rendimiento puede verse afectado cuando se modifican variables table muy grandes o variables table en consultas complejas. En estas situaciones, puede optar por utilizar tablas temporales. Para obtener más información, vea CREATE TABLE (Transact-SQL). Las consultas que leen variables table sin modificarlas pueden generarse en paralelo.En las variables table no se pueden crear índices de forma explícita; en estas variables table tampoco se conserva ninguna estadística. En determinados casos, el rendimiento puede mejorar si se utilizan tablas temporales, las cuales admiten índices y estadísticas. Para obtener más información acerca de las tablas temporales, vea CREATE TABLE (Transact-SQL).Las restricciones CHECK, los valores DEFAULT y las columnas calculadas de la declaración del tipo table no pueden llamar a funciones definidas por el usuario.No se permite la operación de asignación entre variables table.Las variables table no se ven afectadas por las operaciones de reversión de transacciones debido a que tienen un ámbito limitado y no forman parte de la base de datos persistente.Las variables de tabla no se pueden modificar una vez creadas.

Ejemplos

A.Declarar una variable de tipo tableEn el ejemplo siguiente se crea una variable table que almacena los valores especificados en la cláusula OUTPUT de la instrucción UPDATE. Las dos instrucciones SELECT que le siguen devuelven los valores en @MyTableVar y los resultados de la operación de actualización en la tabla Employee. Tenga en cuenta que

los resultados de la columna INSERTED.ModifiedDate son diferentes de los valores de la columna ModifiedDate de la tablaEmployee . Esto se debe a que el desencadenador AFTER UPDATE, que actualiza el valor de ModifiedDate a la fecha actual, se define en la tabla Employee. Sin embargo, las columnas que devuelve OUTPUT reflejan los datos anteriores a la activación de los desencadenadores. Para obtener más información, vea OUTPUT (cláusula de Transact-SQL).Transact-SQL

USE AdventureWorks2012;GODECLARE @MyTableVar table( EmpID int NOT NULL, OldVacationHours int, NewVacationHours int, ModifiedDate datetime);UPDATE TOP (10) HumanResources.EmployeeSET VacationHours = VacationHours * 1.25, ModifiedDate = GETDATE() OUTPUT inserted.BusinessEntityID, deleted.VacationHours, inserted.VacationHours, inserted.ModifiedDateINTO @MyTableVar;--Display the result set of the table variable.SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDateFROM @MyTableVar;GO--Display the result set of the table.SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDateFROM HumanResources.Employee;GOB.Crear una función alineada con valores de tablaEl siguiente ejemplo devuelve una función alineada con valores de tabla. Devuelve tres columnas ProductID, Namey el agregado de ventas totales anuales hasta la fecha por tienda como YTD Total para cada producto vendido a la tienda.Transact-SQL

USE AdventureWorks2012;GOIF OBJECT_ID (N'Sales.ufn_SalesByStore', N'IF') IS NOT NULL DROP FUNCTION Sales.ufn_SalesByStore;GOCREATE FUNCTION Sales.ufn_SalesByStore (@storeid int)RETURNS TABLEASRETURN ( SELECT P.ProductID, P.Name, SUM(SD.LineTotal) AS 'Total' FROM Production.Product AS P JOIN Sales.SalesOrderDetail AS SD ON SD.ProductID = P.ProductID

JOIN Sales.SalesOrderHeader AS SH ON SH.SalesOrderID = SD.SalesOrderID JOIN Sales.Customer AS C ON SH.CustomerID = C.CustomerID WHERE C.StoreID = @storeid GROUP BY P.ProductID, P.Name);GOPara invocar la función, ejecute esta consulta.Transact-SQL

SELECT * FROM Sales.ufn_SalesByStore (602);

Vea también

ReferenciaCOLLATE (Transact-SQL)

CREATE FUNCTION (Transact-SQL)

CREATE TABLE (Transact-SQL)

DECLARE @local_variable (Transact-SQL)

Sugerencias de consulta (Transact-SQL)

ConceptosFunciones definidas por el usuario

Usar parámetros con valores de tabla (motor de base de datos)

rowversion (Transact-SQL)SQL Server 2012

Otras versiones

Este tema aún no ha recibido ninguna valoración - Valorar este tema

Es un tipo de datos que expone números binarios únicos generados automáticamente en una base de datos.rowversion suele utilizarse como mecanismo para marcar la versión de las filas de la tabla. El tamaño de almacenamiento es de 8 bytes. El tipo de datos rowversion es simplemente un número que se incrementa y no conserva una fecha o una hora. Para registrar una fecha o una hora, use un tipo de datos datetime2.

Comentarios

Cada base de datos tiene un contador que se incrementa por cada operación de inserción o actualización que se lleva a cabo en una tabla que contiene una columna rowversion en la base de datos. Este contador es la versión de fila (rowversion) de la base de datos. Realiza un seguimiento de una hora relativa de una base de datos, no una hora real que pueda asociarse con un reloj. Una tabla solo puede tener una columna rowversion. Cada vez que se modifica o inserta una fila con una columna rowversion, el valor rowversion de la base de datos incrementado se inserta en la columna rowversion. Esta propiedad hace que una columna rowversion sea un mal candidato para claves, especialmente claves principales. Cualquier actualización de la fila hace que cambie el valor rowversion, con lo que cambia el valor de la clave. Si la columna está en una clave principal, el valor de la clave principal antigua deja de ser válido, así como las claves externas que hacen referencia al valor antiguo. Si se hace referencia a la tabla en un cursor dinámico, todas las actualizaciones cambian la posición de las filas en el cursor. Si la columna es una clave de índice, todas las actualizaciones de la fila de datos también generan actualizaciones del índice.timestamp es el sinónimo del tipo de datos rowversion y está sujeto al comportamiento de los sinónimos de tipos de datos. En las instrucciones DDL, utilice rowversion en lugar de timestamp siempre que sea posible. Para obtener más información, vea Sinónimos de tipos de datos (Transact-SQL).El tipo de datos timestamp de Transact-SQL es distinto del tipo de datos timestamp definido en el estándar ISO.

 Nota

La sintaxis de timestamp se ha quedado desusada. Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

En una instrucción CREATE TABLE o ALTER TABLE, no tiene que especificar ningún nombre de columna para el tipo de datos timestamp, por ejemplo:CREATE TABLE ExampleTable (PriKey int PRIMARY KEY, timestamp);Si no especifica un nombre de columna, el Motor de base de datos de SQL Server genera el nombre de columnatimestamp; sin embargo, el sinónimo de rowversion no sigue este comportamiento. Cuando utiliza rowversion, debe especificar un nombre de columna, por ejemplo:CREATE TABLE ExampleTable2 (PriKey int PRIMARY KEY, VerCol rowversion) ;

Nota

Se pueden generar valores rowversion duplicados con la instrucción SELECT INTO en la que una columnarowversion está en la lista SELECT. No se recomienda utilizar rowversion de esta manera.

Una columna rowversion que no admite valores NULL equivale semánticamente a una columna binary(8). Una columna rowversion que acepta valores NULL equivale semánticamente a una columna varbinary(8).Puede utilizar la columna rowversion de una fila para determinar con facilidad si algún valor de la fila ha cambiado desde la última vez que se leyó. Si se ha realizado algún cambio en la fila, el valor rowversion se actualiza. Si no se ha realizado algún cambio en la fila, el valor rowversion es el mismo que en la lectura anterior.Para devolver el valor rowversion actual de una base de datos, utilice @@DBTS.Puede agregar una columna rowversion a una tabla para ayudar a mantener la integridad de la base de datos cuando varios usuarios actualizan filas al mismo tiempo. También puede que desee conocer cuántas filas y qué filas se actualizaron sin volver a consultar la tabla.Por ejemplo, suponga que crea una tabla denominada MyTest. Rellena algunos datos en la tabla ejecutando las instrucciones de Transact-SQL siguientes.CREATE TABLE MyTest (myKey int PRIMARY KEY ,myValue int, RV rowversion);GO INSERT INTO MyTest (myKey, myValue) VALUES (1, 0);GO INSERT INTO MyTest (myKey, myValue) VALUES (2, 0);GOA continuación, puede utilizar las instrucciones de Transact-SQL de ejemplo siguientes para implementar el control de simultaneidad optimista en la tabla MyTest durante la actualización.DECLARE @t TABLE (myKey int);UPDATE MyTestSET myValue = 2 OUTPUT inserted.myKey INTO @t(myKey) WHERE myKey = 1

AND RV = myValue;IF (SELECT COUNT(*) FROM @t) = 0 BEGIN RAISERROR ('error changing row with myKey = %d' ,16 -- Severity. ,1 -- State ,1) -- myKey that was changed END;myValue es el valor de columna rowversion para la fila que indica la última vez que lee la fila. El valor rowversionreal debe reemplazar a este valor. Un ejemplo del valor rowversion real es 0x00000000000007D3.También puede colocar las instrucciones de Transact-SQL de ejemplo en una transacción. Al consultar la variable@t en el ámbito de la transacción, puede recuperar la columna myKey actualizada de la tabla sin consultar de nuevo la tabla MyTest.A continuación se muestra el mismo ejemplo con la sintaxis de timestamp:CREATE TABLE MyTest2 (myKey int PRIMARY KEY ,myValue int, TS timestamp);GO INSERT INTO MyTest2 (myKey, myValue) VALUES (1, 0);GO INSERT INTO MyTest2 (myKey, myValue) VALUES (2, 0);GODECLARE @t TABLE (myKey int);UPDATE MyTest2SET myValue = 2 OUTPUT inserted.myKey INTO @t(myKey) WHERE myKey = 1 AND TS = myValue;IF (SELECT COUNT(*) FROM @t) = 0 BEGIN RAISERROR ('error changing row with myKey = %d' ,16 -- Severity. ,1 -- State ,1) -- myKey that was changed END;

Vea también

ReferenciaALTER TABLE (Transact-SQL)

CAST y CONVERT (Transact-SQL)

CREATE TABLE (Transact-SQL)

Tipos de datos (Transact-SQL)

DECLARE @local_variable (Transact-SQL)

DELETE (Transact-SQL)

INSERT (Transact-SQL)

MIN_ACTIVE_ROWVERSION (Transact-SQL)

SET @local_variable (Transact-SQL)

UPDATE (Transact-SQL)

¿Te ha resultado útil?  Sí  No

uniqueidentifier (Transact-SQL)SQL Server 2012

Otras versiones

Este tema aún no ha recibido ninguna valoración - Valorar este tema

Es un GUID de 16 bytes.

Comentarios

Una columna o una variable local de tipo de datos uniqueidentifier se puede inicializar en un valor de las siguiente formas:

Mediante la función NEWID. Mediante la conversión a partir de una constante de cadena con el

formato xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, donde cada x es un dígito hexadecimal en el intervalo 0-9 o a-f. Por ejemplo, 6F9619FF-8B86-D011-B42D-00C04FC964FF es un valor uniqueidentifier válido.

Con los valores uniqueidentifier se pueden utilizar operadores de comparación. No obstante, no se implementa la ordenación mediante la comparación de los patrones de bits de los dos valores. Las únicas operaciones que se pueden realizar con un valor uniqueidentifier son comparaciones (=, <>, <, >, <=, >=) y comprobaciones para NULL (IS NULL e IS NOT NULL). No es posible utilizar otros operadores aritméticos. Con el tipo de datosuniqueidentifier, se pueden utilizar todas las propiedades y restricciones de columna, excepto IDENTITY.La replicación de mezcla y la replicación transaccional con suscripciones de actualización usan columnasuniqueidentifier para garantizar que las filas se identifican de forma única en varias copias de la tabla.

Convertir datos uniqueidentifier

El tipo uniqueidentifier se considera un tipo de carácter para la conversión desde una expresión de caracteres y, por tanto, está sujeto a las reglas de truncamiento para la conversión a un tipo de carácter. Es decir, cuando se convierten expresiones de carácter a un tipo de datos de carácter de un tamaño distinto, se truncan los valores que son demasiado grandes para el nuevo tipo de datos. Vea la sección Ejemplos.

Ejemplos

En el ejemplo siguiente se convierte un valor uniqueidentifier a un tipo de datos char.DECLARE @myid uniqueidentifier = NEWID();SELECT CONVERT(char(255), @myid) AS 'char';En el ejemplo siguiente se muestra el truncamiento de los datos cuando el valor es demasiado largo para el tipo de datos al que se va a convertir. Puesto que el tipo uniqueidentifier está limitado a 36 caracteres, se truncan los caracteres que superan esa longitud.DECLARE @ID nvarchar(max) = N'0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong';SELECT @ID, CONVERT(uniqueidentifier, @ID) AS TruncatedValue;El conjunto de resultados es el siguiente.String TruncatedValue-------------------------------------------- ------------------------------------0E984725-C51C-4BF4-9960-E1C80E27ABA0wrong 0E984725-C51C-4BF4-9960-E1C80E27ABA0

(1 row(s) affected)

Vea también

ReferenciaALTER TABLE (Transact-SQL)

CAST y CONVERT (Transact-SQL)

CREATE TABLE (Transact-SQL)

Tipos de datos (Transact-SQL)

DECLARE @local_variable (Transact-SQL)

NEWID (Transact-SQL)

SET @local_variable (Transact-SQL)

ConceptosSuscripciones actualizables para replicación transaccional

xml (Transact-SQL)SQL Server 2012

Otras versiones

Es el tipo de datos que almacena datos de XML. Puede almacenar instancias de xml en una columna o una variable de tipo xml. Convenciones de sintaxis de Transact-SQL

Sintaxis

xml ( [ CONTENT | DOCUMENT ] xml_schema_collection )

Argumentos

CONTENT

Restringe la instancia de xml a un fragmento de XML correcto. Los datos XML pueden contener cero o más elementos en el nivel superior. También se admiten nodos de texto en el nivel superior.Éste es el comportamiento predeterminado.

DOCUMENT

Restringe la instancia de xml a un documento de XML correcto. Los datos XML deben tener un elemento raíz (solo uno). No se admiten nodos de texto en el nivel superior.

xml_schema_collection

Es el nombre de una colección de esquemas XML. Para crear una columna o una variable xml con tipos, puede especificar opcionalmente el nombre de la colección de esquemas XML. Para obtener más información acerca de XML con y sin tipos, vea Comparar XML con tipo y XML sin tipo.

Comentarios

La representación almacenada de las instancias del tipo de datos xml no puede superar 2 gigabytes (GB) de tamaño.Las facetas CONTENT y DOCUMENT solo se aplican a XML con tipo. Para obtener más información, veaComparar XML con tipo y XML sin tipo.

Ejemplos

USE AdventureWorks;GODECLARE @y xml (Sales.IndividualSurveySchemaCollection)SET @y = (SELECT TOP 1 Demographics FROM Sales.Individual);SELECT @y;GO

Vea también

ReferenciaTipos de datos (Transact-SQL)

ConceptosConversiones de tipos de datos (motor de base de datos)

Otros recursosMétodos de tipo de datos xml

Referencia del lenguaje XQuery (SQL Server)

Estos son los tipos de datos que soporta el SQL de Microsoft® Jet versión 4.0

Los sinónimos son palabras equivalentes al tipo de dato indicado.

El tamaño indica cuánto ocupará una columna del tipo indicado.

Tipo de dato Sinónimos Tamaño DescripciónBINARY VARBINARY

BINARY VARYINGBIT VARYING

1 byte por carácter

Se puede almacenar cualquier tipo de datos en un campo de este tipo. Los datos no se traducen (por ejemplo, a texto). La forma en que se introducen los datos en un campo binario indica cómo aparecerán al mostrarlos.

BIT BOOLEANLOGICALLOGICAL1YESNO

1 byte Valores Sí y No, y campos que contienen solamente uno de dos valores.

TINYINT INTEGER1BYTE

1 byte Un número entero entre 0 y 255.

COUNTER AUTOINCREMENT Se utiliza para campos contadores cuyo valor se incrementa automáticamente al crear un nuevo registro.

MONEY CURRENCY 8 bytes Un número entero comprendido entre – 922.337.203.685.477,5808 y 922.337.203.685.477,5807.

DATETIME DATETIME 

8 bytes Una valor de fecha u hora entre los años 100 y 9999

UNIQUEIDENTIFIER GUID 128 bits Un número de identificación único utilizado con llamadas a procedimientos remotos.

DECIMAL NUMERICDEC

17 bytes Un tipo de datos numérico exacto con valores comprendidos entre 1028 - 1 y - 1028 - 1. Puede definir la precisión (1 - 28) y la escala (0 - precisión definida). La precisión y la escala predeterminadas son 18 y 0, respectivamente.

REAL SINGLEFLOAT4IEEESINGLE

4 bytes Un valor de coma flotante de precisión simple con un intervalo comprendido entre – 3,402823E38 y – 1,401298E-45 para valores negativos, y desde 1,401298E-45 a 3,402823E38 para valores positivos, y 0.

FLOAT DOUBLEFLOAT8IEEEDOUBLENUMBER 

8 bytes Un valor de coma flotante de precisión doble con un intervalo comprendido entre – 1,79769313486232E308 y – 4,94065645841247E-324 para valores negativos, y desde 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos, y 0.

SMALLINT SHORT 2 bytes Un entero corto entre – 32.768 y 32.767.

INTEGER2

INTEGER LONGINTINTEGER4

4 bytes Un entero largo entre – 2.147.483.648 y 2.147.483.647.

IMAGE LONGBINARYGENERALOLEOBJECT

Lo que se requiera

Desde cero hasta un máximo de 2.14 gigabytes.Se utiliza para objetos OLE.

TEXT LONGTEXTLONGCHARMEMONOTENTEXT 

2 bytes por carácter. (Consulte las notas).

Desde cero hasta un máximo de 2.14 gigabytes.

CHAR TEXT(n)ALPHANUMERICCHARACTERSTRINGVARCHARCHARACTER VARYINGNCHARNATIONAL CHARACTERNATIONAL CHARNATIONAL CHARACTER VARYINGNATIONAL CHAR VARYING

2 bytes por carácter. (Consulte las notas).

Desde cero a 255 caracteres.

Notas:

Un campo LONGTEXT se almacena siempre en el formato de representación Unicode.

Si se utiliza el nombre del tipo de datos TEXT sin especificar la longitud opcional (TEXT(25), por ejemplo), se crea un campo LONGTEXT. Esto permite escribir instrucciones CREATE TABLE que producirán tipos de datos coherentes con Microsoft SQL Server.

Un campo CHAR se almacena siempre en el formato de representación Unicode, que es el equivalente del tipo de datos NATIONAL CHAR del SQL de ANSI.

Si se utiliza el nombre del tipo de datos TEXT y se especifica la longitud opcional (TEXT(25), por ejemplo), el tipo de datos del campo es equivalente al tipo de datos CHAR. De ese modo, se mantiene la compatibilidad con versiones anteriores para la mayoría de las aplicaciones de Microsoft Jet, a la vez que se habilita el tipo de datos TEXT (sin especificación de longitud) para la alineación con Microsoft SQL Server. 

Los caracteres de los campos definidos como TEXT (también conocidos como MEMO) o CHAR (también conocidos como TEXT(n) con una longitud específica) se almacenan en el formato de representación Unicode. Los caracteres Unicode requieren siempre dos bytes para el almacenamiento de cada carácter. Para las bases de datos de Microsoft Jet ya existentes que contengan principalmente datos de tipo carácter, esto puede significar que el tamaño del archivo de base de datos sea casi el doble cuando se convierta al formato Microsoft Jet 4.0. Sin embargo, la representación Unicode de muchos juegos de caracteres, antes denominados juegos de caracteres de un solo byte (SBCS), puede comprimirse fácilmente a caracteres de un solo byte. Si define una columna CHAR con el atributo COMPRESSION, los datos se comprimirán automáticamente a medida que se almacenen y se descomprimirán cuando se recuperen de la columna.

 

Los caracteres Unicode y su compresión.

En ACCESS 2000 se utiliza el formato de representación de caracteres Unicode, los caracteres Unicode requieren siempre dos bytes para cada carácter lo que permite una gama más amplia de caracteres.

Para las bases de datos de Microsoft® Jet ya existentes que contengan principalmente datos de tipo carácter, esto puede significar que el tamaño del archivo de base de datos sea casi el doble cuando se convierta al formato Microsoft Jet versión 4.0. Sin embargo, la representación Unicode de muchos juegos de caracteres, antes denominados juegos de caracteres de un solo byte (SBCS), puede comprimirse fácilmente a caracteres de un solo byte. Si se define una columna CHARACTER con el atributo WITH COMPRESSION (propiedad Compresión Unicode), los datos se comprimirán automáticamente cuando se almacenen y se descomprimirán cuando se recuperen de la columna.

Las columnas MEMO también pueden ser definidas de modo que almacenen datos en formato comprimido. No obstante, existe una restricción. Sólo se comprimirán las instancias de columnas MEMO que, tras la compresión, ocupen 4.096 bytes o menos. El resto de instancias de columnas MEMO quedarán sin comprimir. Esto significa que, dentro de una tabla determinada, para una columna MEMO dada, algunos datos pueden estar comprimidos y otros no.

Fuente: Datos extraidos de la ayuda de Microsoft Access2000. 

Ya explicamos que al crear una tabla debemos resolver qué campos (columnas) tendrá y que tipo de datos almacenará cada uno de ellos, es decir, su estructura.

El tipo de dato especifica el tipo de información que puede guardar un campo: caracteres, números, etc.

Estos son algunos tipos de datos básicos de SQL Server (posteriormente veremos otros):

varchar: se usa para almacenar cadenas de caracteres. Una cadena es una secuencia de caracteres. Se coloca entre comillas (simples); ejemplo: 'Hola', 'Juan Perez'. El tipo "varchar" define una cadena de longitud variable en la cual determinamos el máximo de caracteres entre paréntesis. Puede guardar hasta 8000 caracteres. Por ejemplo, para almacenar cadenas de hasta 30 caracteres, definimos un campo de tipo varchar(30), es decir, entre paréntesis, junto al nombre del campo colocamos la longitud.Si asignamos una cadena de caracteres de mayor longitud que la definida, la cadena no se carga, aparece un mensaje indicando tal situación y la sentencia no se ejecuta.Por ejemplo, si definimos un campo de tipo varchar(10) e intentamos asignarle la cadena 'Buenas tardes', aparece un mensaje de error y la sentencia no se ejecuta.

integer: se usa para guardar valores numéricos enteros, de -2000000000 a 2000000000 aprox. Definimos campos de este tipo cuando queremos representar, por ejemplo, cantidades.

float: se usa para almacenar valores numéricos con decimales. Se utiliza como separador el punto (.). Definimos campos de este tipo para precios, por ejemplo.

Antes de crear una tabla debemos pensar en sus cam

pos y optar por el tipo de dato adecuado para cada uno de ellos.Por ejemplo, si en un campo almacenaremos números enteros, el tipo "float" sería una mala elección; si vamos a guardar precios, el tipo "float" es más adecuado, no así "integer" que no tiene decimales. Otro ejemplo, si en un campo vamos a guardar un número telefónico o un número de documento, usamos "varchar", no "integer" porque si bien son dígitos, con ellos no realizamos operaciones matemáticas.

http://www.ehowenespanol.com/tipos-datos-base-datos-microsoft-sql-info_252673/

Tipos de datos de base de datos Microsoft SQLEscrito por Colette Larson | Traducido por Beatriz Sánchez

 

 

 

Escoger el tipo de datos correcto para cada variable es una consideración importante para optimizar el rendimiento a medida que aumenta el tamaño de la base de datos.David Sacks/Lifesize/Getty Images

Microsoft SQL es un lenguaje de base de datos que se usa para crear, gestionar y consultar bases de datos de Microsoft SQL Server y Microsoft Access. Los tipos de datos de Microsoft SQL se refieren a la categoría de la información contenida en las variables de base de datos. Cada tipo de datos, o variable, se guarda en una columna distinta dentro de la base de datos. Las definiciones de columna enseñan a la base de datos cómo se debe almacenar y usar cada tipo de datos.

Otras personas están leyendo

Cómo ejecutar una consulta de base de datos SQL

Cómo ajustar en T-SQLDatos de cadenaLas cadenas de caracteres constan de combinaciones ASCII de longitud variable, longitud que se almacena usando los tipos de datos Char, Varchar y Texto. El tipo de datos de caracter se usa cuando los datos son de un tamaño conocido de menos de 8 KB, mientras que Varchar es apropiado

para las entradas con un número variable de caracteres menor de 8 KB y con texto que contiene las entradas de más de 8 KB. Las cadenas binarias constan en números hexadecimales que usan tipo de datos Binary, Varbinary, e Image Data. Varbinary se usa para almacenar los datos binarios, si no sobrepasan los 8 KB. En tal caso, se debe usar el tipo Image Data. Las cadenas de Unicode están compuestas por caracteres codificados en Unicode, que usan los tipos de datos Nchar, Nvarchar y Ntext . Éstos requieren dos veces el espacio de almacenamiento de tipos de datos no Unicode.

Datos de fecha y horaLos datos de fecha y hora tienen cualquier combinación de fecha válida o formato de tiempo. Datetime necesita 8 bytes de almacenamiento por entrada y se usa para almacenar fechas desde el 1 de enero de 1753 al 31 de diciembre de 9999. Smalldatetime necesita 4 bytes de almacenamiento por entrada y se usa para almacenar fechas desde el 1 de enero de 1900 al 6 de junio de 2079.

Datos numéricosLos datos numéricos constan de los números positivos y negativos, los decimales, las fracciones y los enteros. Los enteros, incluyendo los tipos de datos Bigint, Int, Smallint, y Tinyint, abarcan todos los números enteros, tanto positivos como negativos. Smallint, que requiere 2 bytes de almacenamiento por entrada, es el tipo de datos más comúnmente aplicado y guarda valores desde -32.768 hasta 32.767. Usa Int, que requiere 4 bytes de almacenamiento por entrada, desde -2.147.483.648 hasta 2.147.483. Tinyint, que requiere 1 byte de almacenamiento por entrada, solamente guarda números que van de 0 a 255. Cuando almacenas cualquier número de fracción, el tipo de datos decimal guarda los datos hasta el dígito menos significativo.

Datos de monedaLos datos de moneda almacenan cantidades positivas o negativas de dinero en los tipos de datos Money y Smallmoney hasta 4 lugares decimales. Si hay más lugares decimales, debes usar en su lugar Decimal Data.

Datos especialesLos datos especiales incluyen los datos que no cumplen los criterios de ninguno de los tipos de datos anteriores. Incluyen el Timestamp, que se usa para guardar las modificaciones de fila, el Bit, que guarda un 1 o 0 para representar verdadero o falso, Uniqueidentifier, que indica un identificador globalmente único o contador de fila único, SQL_variant, que se usa para guardar valores de tipos de datos de SQL Server soportados, Table, para guardar resultados específicos para el posterior procesamiento, y User-Defined.

Tipos de datos en Transact SQL

   Cuando definimos una tabla, variable o constante debemos asignar un tipo de dato que indica los posibles valores. El tipo de datos define el formato de almacenamiento, espacio que de disco-memoria que va a ocupar un campo o variable, restricciones y rango de valores validos.

    Transact SQL proporciona una variedad predefinida de tipos de datos . Casi todos los tipos de datos manejados por Transact SQLson similares a los soportados por SQL.

Tipos de datos numéricos.

    SQL Server dispone de varios tipos de datos númericos. Cuanto mayor sea el número que puedan almacenar mayor será en consecuencia el espacio utilizado para almacenarlo. Como regla general se recomienda usar el tipo de dato mínimo posible. Todos los dato numéricos admiten el valor NULL.

Bit. Una columna o variable de tipo bit puede almacenar el rango de valores de  1 a 0.

Tinyint. Una columna o variable de tipo tinyint puede almacenar el rango de valores de 0 a 255.

SmallInt. Una columna o variable de tipo smallint puede almacenar el rango de valores -32768 a 32767.

Int. Una columna o variable de tipo int puede almacenar el rango de valores -231 a 231-1 .

BigInt. Una columna o variable de tipo bigint puede almacenar el rango de valores -263 a 263-1 .

Decimal(p,s). Una columna de tipo decimal puede almacenar datos númericos decimales sin redondear. Donde p es la precision (número total del dígitos) y s la escala (número de valores decimales)

Float. Una columna de datos float puede almacenar el rango de valores -1,79x-10308 a 1,79x-10308, , si la definimos con el valor máxmo de precisión. La precisión puede variar entre 1 y 53.

Real. Sinónimo de float(24). Puede almacenar el rango de valores -3,4x-1038 a 3,4x-1038, 

Money. Almacena valores númericos monetarios de -263  a 263-1, con una precisión de hasta diexz milesimas de la unidad monetaria. 

SmallMoney. Almacena valores númericos monetarios de -214.748,3647 a 214.748,3647, con una precisión de hasta diez milesimas de la unidad monetaria.

    Todos los tipos de datos enteros pueden marcarse con la propiedad identity para hacerlos autonuméricos.

DECLARE @bit bit,@tinyint tinyint,@smallint smallint,@int int, @bigint bigint,@decimal decimal(10,3), -- 10 digitos, 7 enteros y

-- 3 decimales@real real,@double float(53),@money money

set @bit = 1print @bitset @tinyint = 255print @tinyintset @smallint = 32767print @smallint set @int = 642325print @intset @decimal = 56565.234 -- Punto como separador decimalprint @decimalset @money = 12.34print @money

Tipos de datos de caracter.

Char(n). Almacena n caracteres en formato ASCII, un byte por cada letra. Cuando almacenamos datos en el tipo char, siempre se utilizan los n caracteres indicados, incluso si la entrada de datos es inferior. Por ejemplo, si en un char(5), guardamos el valor 'A', se almacena 'A    ', ocupando los cinco bytes.

Varchar(n).Almacena n caracteres en formato ASCII, un byte por cada letra. Cuando almacenamos datos en el tipo varchar, unicamente se utilizan los caracteres necesarios,Por ejemplo, si en un varchar(255), guardamos el valor 'A', se almacena 'A', ocupando solo un byte bytes.

Varchar(max). Igual que varchar, pero al declararse como max puede almacenar 231-1 bytes.

Nchar(n).Almacena n caracteres en formato UNICODE, dos bytes por cada letra. Es recomendable utilizar este tipo de datos cuando los valores que vayamos a almacenar puedan pertenecer a diferente idomas.

Nvarchar(n).Almacena n caracteres en formato UNICODE, dos bytes por cada letra. Es recomendable utilizar este tipo de datos cuando los valores que vayamos a almacenar puedan pertenecer a diferente idomas.

Nvarchar(max).Igual que varchar, pero al declararse como max puede almacenar 231-1 bytes.  

Tipos de datos de fecha.

Datetime. Almacena fechas con una precision de milisegundo. Debe usarse para fechas muy especificas.

SmallDatetime. Almacena fechas con una precision de minuto, por lo que ocupa la mitad de espacio de que el tipo datetime, para tablas que puedan llegar a tener muchos datos es un factor a tener muy en cuenta.

TimeStamp.Se utiliza para marcar un registro con la fecha de inserción - actualización. El tipo timestamp se actualiza automáticamente cada vez que insertamos o modificamos los datos.

Tipos de datos binarios.

Binary. Se utiliza para almacenar datos binarios de longitud fija, con una longitud máxima de 8000 bytes.

Varbinary. Se utiliza para almacenar datos binarios de longitud variable, con una longitud máxima de 8000 bytes..Es muy similar a binary, salvo que varbinary utiliza menos espacio en disco.

Varbinary(max).Igual que  varbinary, pero puede almacenar 231-1 bytes

Tipo de datos XML.

XML.Una de las grandes mejoras que incorpora SQL Server 2005 es el soporte nativo para XML. Como podemos deducir, este tipo de datos se utiliza para almacenar XML.

 DECLARE @myxml XML  set @myxml = (SELECT @@SERVERNAME NOMBRE FOR XML RAW, TYPE)  print cast(@myxml as varchar(max))

Obtendremos la siguiente salida:    <row nombre="SVR01"/>

Otros tipos de datos.

UniqueIdentifier. Se utiliza para identificadores únicos. Para generar identificadores únicos debemos utilizar la funciónNEWID().

 DECLARE @myuniqueid UNIQUEIDENTIFIER  set @myuniqueid = NEWID()  print cast(@myuniqueid as varchar(36))

Obtendremos la siguiente salida: 46141D79-102C-4C29-A620-792EA0208637

Sql_Variant.Permite almacenar valores de diferentes tipos de datos. No puede almacena varchar(max), xml, timestamp y tipos de datos definidos por el usuario. 

Tipos de datos personalizados.

    Transact SQL permite la creación de tipos de datos personalizados, a trevés de la instrucción CREATE TYPE. Personalmente, desaconsejo el uso de tipos de datos personalizados.

CREATE TYPE MD5 FROM CHAR(32) NULLGODECLARE @miMD5 MD5set @miMD5 = '0000000000000000000000000000000A'print @miMD5

 

http://www.devjoker.com/contenidos/catss/232/Tipos-de-datos-en-Transact-SQL.aspx

Tipos de Datos MSSQL ServerFLY D B A    :: MSSQL Server :: Programación

Página 1 de 1. • Compartir • ¡Más!

   

 Tipos de Datos MSSQL Server  xdiablo el Jue Sep 11, 2008 5:09 pm

Como sabrán, definir correctamente el tipo de cambio es muy importante a la hora de

crear una tabla por eso aca les dejo un resumen que hice de los tipos de datos que

tiene MSSQL Server. Antes que me digan algo: existen otros tipos de datos como Text o

Image, pero no los puse porque microsoft dice que no se deben usar mas ya que en la

futura version va a desaparecer. En su lugar usar Varchar o Binary.

TIPOS DE DATOS MSSQL SERVER

Alfanuméricos

Varchar(n)

Datos de caracteres no Unicode de longitud variable. n puede ser un valor entre 1 y

8.000. 

Tamaño: el número de caracteres especificado + 2 bytes. Los datos especificados

pueden tener una longitud de 0 caracteres. 

Nvarchar(n)

Datos de carácter Unicode de longitud variable. n puede ser un valor comprendido

entre 1 y 4.000. 

Tamaño: dos veces el número de caracteres especificado + 2 bytes. 

Char(n)

Datos de caracteres no Unicode de longitud fija, con una longitud de n bytes. n debe

ser un valor entre 1 y 8.000. 

Tamaño: es n bytes.

Nchar(n)

Datos de carácter Unicode de longitud fija, con n caracteres. n debe estar comprendido

entre 1 y 4.000. 

Tamaño: dos veces n bytes.

Numéricos Exactos

Numeric(p,s) – Decimal(p,s)

Números de precisión y escala fijas. numeric es funcionalmente equivalente a decimal.

p (precisión)

El número total máximo de dígitos que se puede almacenar, tanto a la izquierda como

a la derecha del separador decimal. La precisión debe ser un valor comprendido entre

1 y la precisión máxima de 38. La precisión predeterminada es 18.

s (escala)

El número máximo de dígitos decimales que se puede almacenar a la derecha del

separador decimal. La escala debe ser un valor comprendido entre 0 y p. Sólo es

posible especificar la escala si se ha especificado la precisión. La escala

predeterminada es 0; por lo tanto, 0 <= s <= p. Los tamaños de almacenamiento

máximo varían, según la precisión.

Int, Bigint, Smallint y Tinyint

Tipos de datos numéricos exactos que utilizan datos enteros. 

Bigint

De -2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807).

Tamaño: 8 bytes

Int

De -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647). 

Tamaño: 4 bytes

Smallint

De -2^15 (-32.768) a 2^15-1 (32.767). 

Tamaño: 2 bytes

Tinyint

De 0 a 255. 

Tamaño: 1 byte

Money y Smallmoney

Tipos de datos que representan valores monetarios o de moneda.

Money

De -922.337.203.685,4775808 a 922.337.203.685,4775807 

Tamaño: 8 bytes

Smallmoney

De - 214.748,3648 a 214.748,3647. 

Tamaño: 4 bytes

Bit

Tipo de datos entero que puede aceptar los valores 1, 0 o NULL.

Tamaño: Si una tabla contiene 8 columnas o menos de tipo bit, éstas se almacenan

como 1 byte. Si hay entre 9 y 16 columnas de tipo bit, se almacenan como 2 bytes, y

así sucesivamente.

Numéricos Aproximados

Float - Real

Tipos de datos numéricos y aproximados que se utilizan con datos numéricos de coma

flotante. Los datos de coma flotante son aproximados; por tanto, no todos los valores

del intervalo del tipo de datos se pueden representar con exactitud.

Float(n)

De - 1,79E+308 a -2,23E-308, 0 y de 2,23E-308 a 1,79E+308. 

Tamaño: 

• n de 1-24, 7 dígitos 4 bytes. 

• n 25-53, 15 dígitos 8 bytes

Real

De - 3,40E + 38 a -1,18E - 38, 0 y de 1,18E - 38 a 3,40E + 38. 

Tamaño: 4 Bytes

Fecha y Hora

En la tabla siguiente se enumeran los tipos de datos de fecha y hora de Transact-SQL. 

Tipo de datos Formato Intervalo Precisión Tamaño (bytes) Precis. segundo def. por

usuario Desplaz. zona horaria 

time 

hh:mm:ss[.nnnnnnn] 00:00:00.0000000 a 23:59:59.9999999 100 ns De 3 a 5 Sí No

date AAAA-MM-DD 0001-01-01 a 9999-12-31 1 día 3 No No

smalldatetime 

AAAA-MM-DD hh:mm:ss 1900-01-01 a 2079-06-06 1 minuto 4 No No

datetime 

AAAA-MM-DD hh:mm:ss[.nnn] 1753-01-01 a 9999-12-31 0,00333 segundos 8 No No

datetime2 

AAAA-MM-DD hh:mm:ss[.nnnnnnn] 0001-01-01 00:00:00.0000000 a 9999-12-31

23:59:59.9999999 100 ns De 6 a 8 Sí No

datetimeoffset 

AAAA-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm 0001-01-01 00:00:00.0000000 a 9999-

12-31 23:59:59.9999999 (en UTC) 100 ns De 8 a 10 Sí Sí

Binarios

Binary(n)

Datos binarios de longitud fija con una longitud de n bytes, donde n es un valor que

oscila entre 1 y 8.000. 

Tamaño: n bytes.

Varbinary(n)

Datos binarios de longitud variable, donde n es un valor que oscila entre 1 y 8.000.

Tamaño: la longitud real de los datos especificados + 2 bytes. Los datos especificados

pueden tener una longitud de 0 bytes.

xdiablo

Admin

Cantidad de envíos: 12

Edad: 29

Fecha de inscripción: 25/04/2008

 

 

 Re: Tipos de Datos MSSQL Server  MarianoK el Vie Sep 12, 2008 12:27 pm

Bien Panchito por estas aclaraciones del tipo booksonline-isticas

Igualmente los Text/Image se usan mucho, incluso los mismos productos de microsoft

tipo Biztalk y Sharepoint por ejemplo.

http://flydba.top-me.com/t15-tipos-de-datos-mssql-server

Os mostramos los tipos de datos del motor de base de datos SGBD Microsoft SQL Server y MSDE: bigint, int, smallint, tinyint, bit, decimal, money, smallmoney, float, real, datetime, smalldatetime, char, varchar, varbinary, etc. Explicamos cuando utilizarlos y el tamaño que ocupan.

Definición de Microsoft SQL Server

Microsoft SQL Server es un sistema de gestión de bases de datos relacionales (SGBD) basado en el lenguaje Transact-SQL, y específicamente en Sybase IQ. Este motor de base de datos admite multitud de usuarios conectados a la base de datos de forma simultánea y concurrente.

Algunas de las características de Microsoft SQL Server:

Soporte de transacciones. Escalabilidad, estabilidad y seguridad. Soporta procedimientos almacenados. Incluye también un potente entorno gráfico de administración, que permite el uso de comandos DDL y DML

gráficamente. Permite trabajar en modo cliente-servidor, donde la información y datos se alojan en el servidor y las

terminales o clientes de la red sólo acceden a la información. Permite administrar información de otros servidores de datos.

Este sistema de gestión de bases incluye una versión reducida, llamada MSDE con el mismo motor de base de datos pero orientado a proyectos más pequeños, que en su versión 2005 pasa a ser el SQL Express Edition, que se distribuye en forma gratuita.

 Tipos de datos de Microsoft SQL Server

A continuación os mostramos los tipos de datos que se pueden definir para este motor de base de datos (tanto para Microsoft SQL Server como para MSDE):

Grupo Tipo de dato Intervalo Almacenamiento

Numéricos exactos

bigint De -263 (-9.223.372.036.854.775.808) a 263 - 1 (9.223.372.036.854.775.807) 8 bytes

int De -231 (-2.147.483.648) a 231 - 1 (2.147.483.647) 4 bytes

smallint De -215 (-32.768) a 215 - 1 (32.767) 2 bytes

tinyint De 0 a 255 1 byte

bit Tipo de datos entero que puede aceptar los valores 1, 0 ó NULL 2 bytes

decimal, numeric, decimal (p, s)

p (precisión): el número total máximo de dígitos decimales que se puede almacenar, tanto a la izquierda como a la derecha del separador decimal. La precisión debe ser un valor comprendido entre 1 y la precisión máxima de 38. La precisión predeterminada es 18.

s (escala): el número máximo de dígitos decimales que se puede almacenar a la derecha del separador decimal. La escala debe ser un valor comprendido entre 0 y p. Sólo es posible especificar la escala si se ha especificado la precisión. La escala predeterminada es 0.

Con precisión máxima 1038 +1 y 1038 - 1

Precisión 1 - 9: 5 bytes

money Tipos de datos que representan valores monetarios o de moneda: de - 8 bytes

922.337.203.685,4775808 a 922.337.203.685,4775807

smallmoney De - 214,7483648 a 214,7483647 4 bytes

Numéricos aproximados

float De - 1,79E+308 a -2,23E-308, 0 y de 2,23E-308 a 1,79E+308Depende del valor de n

real De - 3,40E + 38 a -1,18E - 38, 0 y de 1,18E - 38 a 3,40E + 38 4 Bytes

Fecha y horadatetime Del 1 de enero de 1753 hasta el 31 de diciembre de 9999  

smalldatetime Del 1 de enero de 1900 hasta el 6 de junio de 2079  

Cadenas de caracteres

char (n)Caracteres no Unicode de longitud fija, con una longitud de n bytes. ndebe ser un valor entre 1 y 8.000

n bytes

varchar (n)Caracteres no Unicode de longitud variable. n indica que el tamaño de almacenamiento máximo es de 231 - 1 bytes

n bytes (aprox.)

text

En desuso, sustituido por varchar.

Datos no Unicode de longitud variable con una longitud máxima de 231 - 1 (2.147.483.647) caracteres

max bytes (aprox.)

Cadenas de caracteres unicode

nchar (n)Datos de carácter Unicode de longitud fija, con n caracteres. n debe estar comprendido entre 1 y 4.000

2 * n bytes

nvarchar (n)Datos de carácter Unicode de longitud variable. n indica que el tamaño máximo de almacenamiento es 231 - 1 bytes

2 * n bytes + 2 bytes

ntext (n)

En desuso, sustituido por nvarchar.

Datos Unicode de longitud variable con una longitud máxima de 230 - 1 (1.073.741.823) caracteres

2 * n bytes

Cadenas binarias

binary (n)Datos binarios de longitud fija con una longitud de n bytes, donde n es un valor que oscila entre 1 y 8.000

n bytes

varbinary (n)Datos binarios de longitud variable. n indica que el tamaño de almacenamiento máximo es de 231 - 1 bytes

n bytes

imageEn desuso, sustituido por varbinary.

Datos binarios de longitud variable desde 0 hasta 231 - 1 (2.147.483.647) bytes

 

Otros tipos de datos

cursorTipo de datos para las variables o para los parámetros de resultado de los procedimientos almacenados que contiene una referencia a un cursor. Las variables creadas con el tipo de datos cursor aceptan NULL

 

timestampTipo de datos que expone números binarios únicos generados automáticamente en una base de datos. El tipo de datos timestamp es simplemente un número que se incrementa y no conserva una fecha o una hora

8 bytes

sql_variantTipo de datos que almacena valores de varios tipos de datos aceptados en SQL Server, excepto text, ntext, image, timestamp y sql_variant

 

uniqueidentifier Es un GUID (Globally Unique Identifier, Identificador Único Global) 16 bytes

table

Es un tipo de datos especial que se puede utilizar para almacenar un conjunto de resultados para su procesamiento posterior. table se utiliza principalmente para el almacenamiento temporal de un conjunto de filas devuelto como el conjunto de resultados de una función con valores de tabla

 

xml Almacena datos de XML. Puede almacenar instancias de xml en una columna o una variable de tipo xml

 

 

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=349