You are on page 1of 112

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, expresin y parmetro 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. Tambin puede definir sus propios tipos de datos en Transact-SQL o Microsoft .NET Framework. Los tipos de datos de alias estn basados en los tipos de datos proporcionados por el sistema. Para obtener ms informacin acerca de los tipos de datos de alias, vea CREATE TYPE (Transact-SQL). Los tipos definidos por el usuario obtienen sus caractersticas de los mtodos y los operadores de una clase que se crean mediante uno de los lenguajes de programacin compatibles con .NET Framework. Cuando dos expresiones que tienen tipos de datos, intercalaciones, precisin, escala o longitud diferentes son combinadas por un operador, las caractersticas del resultado vienen determinadas por lo siguiente: El tipo de datos del resultado viene determinado por la aplicacin de las reglas de precedencia de tipos de datos a los tipos de datos de las expresiones de entrada. Para obtener ms informacin, vea Prioridad de tipo de datos (Transact-SQL). La intercalacin del resultado viene determinada por las reglas de precedencia de intercalacin cuando el tipo de datos del resultado es char, varchar, text, nchar, nvarchar o ntext. Para obtener ms informacin, vea Prioridad de intercalacin (Transact-SQL). La precisin, escala y longitud del resultado dependen de la precisin, escala y longitud de las expresiones de entrada. Para obtener ms informacin, vea Precisin, escala y longitud (Transact-SQL). SQL Server proporciona sinnimos de tipos de datos para la compatibilidad con ISO. Para obtener ms informacin, vea Sinnimos de tipos de datos (Transact-SQL).

Categoras de tipos de datos


Los tipos de datos de SQL Server se organizan en las siguientes categoras:

Numricos exactos
bigint bit decimal int money numeric smallint smallmoney tinyint

Numricos aproximados
float real

Fecha y hora
Fecha datetime2 datetime datetimeoffset smalldatetime time

Cadenas de caracteres
char text varchar

Cadenas de caracteres Unicode


nchar ntext nvarchar

Cadenas binarias
binary image varbinary

Otros tipos de datos


cursor hierarchyid sql_variant tabla timestamp uniqueidentifier xml

Vea tambin

domingo, 6 de marzo de 2011

SQL SERVER 2008: Tipos de Dato


Categora Descripcin Tipo de Dato Descripcin

binary Un dato Binary almacena cadenas de bits. El dato consiste de nmeros hexadecimales. Por varbinary ejemplo, el nmero decimal 245 vale en hexadecimal F5. image

Los datos deben tener la misma longitud fija (hasta 8 KB) Los datos pueden variar en el nmero de dgitos hexadecimales (hasta 8 KB) Los datos pueden ser de longitud variable y exceder los 8 KB. Los datos deben tener la misma longitud fija (hasta 8 KB) Los datos pueden variar en el nmero de caracteres (hasta 8 KB) Los datos pueden ser cadena de caracteres ASCII que excedan los 8 KB. Los datos fecha estn comprendidos entre en el 1 de Enero de 1753 hasta el 31 de diciembre de 9999 (requiere 8 bytes por dato).

Binary

Los datos Character consisten char de cualquier combinacin de letras, smbolos, y caracteres Characte numricos. Por ejemplo, r datos character vlidos:"John928" "(0*&(%B99 varchar nh jkJ"

text

datetime Los datos Date time consisten de combinaciones de fechas o horas vlidas. No existe tipos de datos separados para fechas y horas para almacenar solo fechas o solo horas

Date time

Los datos fecha estn comprendidos entre en el 1 de Enero de 1900 hasta el smalldatetime 31 de diciembre de 2079 (requiere 4 bytes por dato). Los datos pueden tener un mximo de 30 dgitos, que pueden estar todos a la derecha de la coma

Decimal

Los datos Decimal consisten de datos numricos que son almacenados al menor dgito

decimal

Categora

Descripcin

Tipo de Dato

Descripcin

significativo

decimal. El tipo de dato almacena un representacin exacta del nmero. En SQL Server, el tipo de datos numeric es equivalente al tipo de datos decimal. Desde 1.79E + 308 a 1.79E + 308. Desde 3.40E + 38 a 3.40E + 38. Desde 2^63 ( 9223372036854775808) a 2^631 (9223372036854775807). Tamao 8 bytes. Desde 2.147.483.648 a 2.147.483.647 (requiere de 4 bytes por valor). Desde 32,768 a 32.767 (requiere de 2 bytes por valor). Desde cero a 255 (requiere de 1 bytes por valor). Desde 922.337.203.685.477,5808 a +922.337.203.685.477,58 07 Tamao 8 bytes. Desde 214.748,3648 a 214.748,3647 Tamao 4 bytes. Consisten en un 1 o un 0. Se usan para representar valores lgicos VERDADERO o FALSO, SI o

numeric

Floating point

Datos numricos aproximados que consisten de datos con una aproximacin tanto como el sistema de numeracin binaria pueda ofrecer

float

real

Los datos Integer consisten de nmeros enteros positivos y negativos tales como: 15, 0, 5, y 2.509. Integer

bigint

int

smallint

tinyint

money Monetar y Monetary representa montos de dinero positivos o negativos smallmoney

Special

Special se utiliza para datos que bit caben en ninguna de las categors anteriores.

Categora

Descripcin

Tipo de Dato

Descripcin

NO Este tipo de dato es usado para variables o prmetros OUTPUT en procedimientos almacenados que contenga una referencia a un cursor. Cualquier variable creada con el tipo de datos cursor puede tomar valor nulo Este tipo de datos es usado para indicar la secuencia de la actividad del SQL Server sobre una fila y es representado por un nmero incremental en formato binario.

cursor

timestamp

Consiste de nmeros hexadecimales de 16 byte, indicando un identificador uniqueidentifie nico global (GUID). Los r GUID son usados cuando una columna deba ser nica frente a cualquier otra columna. Este tipo de datos soporta a cualquier otro tipo de datos soportado por SQL Server excepto text, ntext, timestamp, image, y sql_variant. 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 funcin definida por el usuario.

SQL_variant

table

Categora

Descripcin

Tipo de Dato

Descripcin

Unicode

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

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

Los datos pueden variar en el nmero de caracteres (hasta 4000 caracteres Unicode)

ntext

Los datos pueden exceder los 4000 caracteres 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 numricos exactos que utilizan datos enteros.

Tipo de datos bigint

Intervalo De -2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807) De -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647) De -2^15 (-32.768) a 2^15-1 (32.767) De 0 a 255

Almacenamiento 8 bytes

int smallint tinyint

4 bytes 2 bytes 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 grfico de prioridad de tipo de datos. Las funciones solo devuelven bigint si la expresin de parmetro es un tipo de datos bigint. SQL Server no promueve automticamente otros tipos de datos enteros ( tinyint, smallint e int) en bigint.

Advertencia

Cuando se utilizan los operadores aritmticos +, -, *, / o % para llevar a cabo conversiones implcitas o explcitas 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 precisin de los resultados de la expresin varan dependiendo de si la consulta tiene parmetros automticos o no. Por lo tanto, expresiones similares en las consultas pueden generar resultados diferentes. Cuando una consulta no tiene parmetros automticos, el valor constante primero se convierte en numeric, cuya precisin es lo suficientemente grande como para conservar el valor de la constante, antes de realizar la conversin 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 parmetros automticos, 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 precisin del tipo de los resultados entre consultas similares, sino que tambin puede variar el valor de los resultados. Por ejemplo, el valor de los resultados de una consulta con parmetros automticos que incluye la expresin SELECT CAST (1.0 / 7 AS float) variar con respecto a la misma consulta cuando no tenga parmetros automticos, puesto que los resultados de la primera se truncarn para ajustarse al tipo de datosnumeric (10, 0).

Convertir datos enteros


Cuando se convierten implcitamente enteros en un tipo de datos de caracteres, si el entero es demasiado grande para ajustarse al campo de carcter, SQL Server escribe el carcter 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 Result2 1073741823 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 conversin a bit promueve cualquier valor distinto de cero a uno.

decimal y numeric (TransactSQL)


SQL Server 2012 Otras versiones

Personas que lo han encontrado til: 4 de 11 - Valorar este tema Tipos de datos numricos que tienen precisin y escala fijas. decimal [ (p[ ,s] )] y numeric[ (p[ ,s] )] Nmeros de precisin y escala fijas. Cuando se utiliza la precisin mxima, los valores vlidos se sitan entre - 10^38 +1 y 10^38 - 1. Los sinnimos de ISO para decimal son dec y dec(p, s). numeric es funcionalmente equivalente a decimal. p (precisin) El nmero total mximo de dgitos decimales que almacenar, tanto a la izquierda como a la derecha del separador decimal. La precisin debe ser un valor comprendido entre 1 y la precisin mxima de 38. La precisin predeterminada es 18. s (escala) El nmero de dgitos decimales que se almacenar a la derecha del separador decimal. Este nmero se extrae de p para determinar el nmero mximo de dgitos 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 precisin. La escala predeterminada es 0; por lo tanto, 0 <= s <= p. Los tamaos de almacenamiento mximo varan segn la precisin.

Precisin 1-9 10-19 20-28 29-38

Bytes de almacenamiento 5 9 13 17

Convertir datos decimal y numeric

En el caso de los tipos de datos decimal y numeric, SQL Server considera cada combinacin especfica de precisin 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 automticamente a un valor de datos numeric, con la precisin y escala mnimas necesarias. Por ejemplo, la constante 12.345 se convierte a un valor numeric con una precisin de 5 y una escala de 3. La conversin de valores decimal o numeric a valores float o real puede provocar alguna prdida de precisin.La conversin 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 nmero a un valor decimal onumeric con una precisin y una escala inferiores. Sin embargo, si la opcin SET ARITHABORT est establecida en ON, SQL Server genera un error cuando se produce un desbordamiento. La prdida de precisin y escala no es suficiente para generar un error. Cuando se conviertan valores float o reales a valores decimales o numricos, el valor decimal nunca tendr ms de 17 decimales. Los valores float < 5E-18 se convertirn 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 money

Intervalo De -922,337,203,685,477.5808 a 922,337,203,685,477.5807 De - 214.748,3648 a 214.748,3647

Almacenamiento 8 bytes

smallmoney

4 bytes

Comentarios
Los tipos de datos money y smallmoney tienen una precisin de una diezmilsima de las unidades monetarias que representan. Use un punto para separar las unidades parciales de moneda, como cntimos, de las unidades completas de moneda. Por ejemplo, 2.15 puede especificar 2 dlares y 15 centavos. Estos tipos de datos pueden usar alguno de los siguientes smbolos 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 smbolo de moneda, SQL Server

no almacena ninguna informacin de moneda asociada con el smbolo, solo almacena el valor numrico.

Convertir datos money


Cuando se convierte a money desde tipos de datos enteros, se supone que las unidades estn 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 numricos y aproximados que se utilizan con datos numricos 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 sinnimo ISO de real es el tipo float(24). Tipo de datos float Intervalo De - 1,79E+308 a -2,23E-308, 0 y de 2,23E-308 a 1,79E+308 De - 3,40E + 38 a -1,18E - 38, 0 y de 1,18E - 38 a 3,40E + 38 Almacenamiento Depende del valor de n. 4 Bytes

real

Convenciones de sintaxis de Transact-SQL

Sintaxis
float [ (n) ] Donde n es el nmero de bits que se utilizan para almacenar la mantisa del nmero float en notacin cientfica y, por tanto, dicta su precisin y el tamao de almacenamiento. Si se especifica n, debe ser un valor entre 1 y 53. El valor predeterminado de n es 53.

Valor del parmetro n 1-24 25-53

Precisin 7 dgitos 15 dgitos

Tamao de almacenamiento 4 bytes 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 estndar ISO para todos los valores de n desde 1 hasta53. El sinnimo 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 carcter, suele resultar ms til la funcin de cadena STR que CAST( ). Esto se debe a que STR permite ms control sobre el formato. Para obtener ms informacin, veaSTR (Transact-SQL) y Funciones integradas (Transact-SQL). La conversin de los valores float que utilizan la notacin cientfica a decimal o numeric se restringe nicamente a los valores con una precisin de 17 dgitos. Cualquier valor con una precisin 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.

Descripcin de date
Propiedad Sintaxis Uso Valor date DECLARE @MyDate date CREATE TABLE Table1 ( Column1 date ) AAAA-MM-DD Para obtener ms informacin, vea la seccin "Compatibilidad con versiones anteriores de los clientes de niveles inferiores" ms adelante. De 0001-01-01 a 9999-12-31 Del 1 de enero del ao 1 despus de Cristo al 31 de diciembre de 9999 AAAA es una cifra de cuatro dgitos comprendida entre 0001 y 9999 que representa un ao. MM es una cifra de dos dgitos comprendida entre 01 y 12 que representa un mes del ao especificado. DD es una cifra de dos dgitos comprendida entre 01 y 31 dependiendo del mes, que representa un da del mes especificado. 10 posiciones 10, 0

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

Intervalos de elementos

Longitud en caracteres Precisin, escala

Tamao de almacenamiento Estructura de almacenamiento Precisin Valor predeterminado

3 bytes, fijo

1, fecha de almacenes de enteros de 3 bytes.

Un da 1900-01-01 Este valor se utiliza para la parte de fecha anexada para la conversin implcita de time a datetime2 o datetimeoffset. Gregoriano No

Calendario Precisin de fracciones de segundo definida por el usuario Conservacin y reconocimiento del ajuste de zona horaria Reconocimiento del horario de verano

No

No

Formatos del literales de cadena compatibles para date


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

Numrico 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

Descripcin [m]m, dd, y [aa]aa representa el mes, el da y el ao en una cadena con marcas de barras diagonales (/), guiones (-) o puntos (.) como separadores. Solo se admiten los aos de dos o cuatro dgitos. Siempre que sea posible utilice los aos de cuatro dgitos. Para especificar un nmero entero entre 0001 y 9999 que represente el ao lmite para interpretar aos de dos dgitos como aos de cuatro dgitos, utilice la Establecer la opcin de configuracin del servidor Fecha lmite de ao de dos dgitos. Un ao de dos dgitos menor o igual que los ltimos dos dgitos del ao lmite pertenece al mismo siglo que el ao lmite. En cambio, un ao de dos dgitos mayor que los ltimos dos dgitos del ao lmite pertenece al

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]mdd [aa]aa-[m]mdd Alfabtico 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 ISO 8601 AAAA-MM-DD YYYYMMDD Sin separacin [aa]aammdd aaaa[mm][dd]

siglo anterior al ao lmite. Por ejemplo, si el valor del ao lmite de dos dgitos es 2049 (el valor predeterminado), el ao de dos dgitos 49 se interpreta como 2049 y el ao de dos dgitos 50 se interpreta como 1950. La configuracin 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.

Descripcin 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 maysculas. Para evitar la ambigedad, use aos de cuatro dgitos. Si falta el da, se usar el primer da del mes.

Descripcin Igual que el estndar SQL. ste es el nico formato que se define como una norma internacional. Descripcin Los datos de tipo date se pueden especificar con cuatro, seis u ocho dgitos. Una cadena de seis u ocho dgitos se interpreta siempre como ymd. El mes y el da deben ser siempre de dos dgitos. Una cadena de cuatro dgitos se interpreta como el ao. Descripcin Especfico de la API de ODBC: Funciona en SQL Server 2012 como en SQL Server 2005.

ODBC { d 'aaaamm-dd' }

Formato W3C XML aaaa-mmddDZH

Descripcin Especficamente 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 dgitos, de 0 a 14, que representa el nmero de horas del ajuste de zona horaria. MM es una cifra de dos dgitos, de 0 a 59, que representa el nmero de minutos adicionales en el ajuste de zona horaria. + (ms) 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 vlido de ajuste de zona horaria es de -14: 00 a +14: 00.

Compatibilidad con ANSI e ISO 8601


date cumple la definicin del estndar ANSI SQL para el calendario Gregoriano: "NOTA 85 - los tipos de datos datetime permitirn 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 estndar SQL, que se define como AAAA-MM-DD. Este formato es igual que la definicin 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 asignacin 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 hh:mm:ss[. nnnnnnn]

ODBC de nivel inferior

OLEDB de nivel inferior

JDBC de nivel infer

time

SQL_WVARCHAR o SQL_VARCHAR SQL_WVARCHAR o SQL_VARCHAR

DBTYPE_WSTR o DBTYPE_STR DBTYPE_WSTR o DBTYPE_STR

Java.sql.St

date

AAAA-MM-DD

Java.sql.St

datetime2

AAAA-MM-DD hh:mm:ss[. nnnnnnn] AAAA-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm

SQL_WVARCHAR o SQL_VARCHAR SQL_WVARCHAR o SQL_VARCHAR

DBTYPE_WSTR o DBTYPE_STR DBTYPE_WSTR o DBTYPE_STR

Java.sql.St

datetimeoffset

Java.sql.St

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 informacin acerca de cmo 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 hora


En 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 time(n)

Detalles de la conversin La conversin no se produce y se recibe el mensaje de error 206: "Conflicto de tipos de operandos: date es incompatible con time". Se copia la fecha y el componente de hora se establece en 00:00:00.000. El cdigo 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)

datetime

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 conversin del tipo de datos date en smalldatetime produjo un valor fuera de intervalo" y el valor smalldatetime se establece en NULL. El cdigo 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 cdigo 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 cdigo 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 date


Las conversiones de literales de cadena en tipos de fecha y hora son posibles cuando todas las partes de las cadenas estn en formatos vlidos. En caso contrario, se generar un error en el tiempo de ejecucin. Las conversiones implcitas o explcitas que no especifican un estilo (desde tipos de fecha y hora hasta literales de cadena) estarn en el formato predeterminado de la sesin 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 de ODBC

date

Los literales de cadena de ODBC se asignan al tipo de datos datetime. Cualquier operacin de asignacin de los literales de DATETIME de ODBC a un tipo date provocar una conversin implcita entre datetime y este tipo, tal y como se define en las reglas de conversin. Vea la regla anterior de DATE de ODBC.

TIME de ODBC DATETIME DE ODBC Solo DATE Solo TIME Solo TIMEZONE DATE + TIME DATE + TIMEZONE TIME + TIMEZONE DATE + TIME + TIMEZONE

Vea la regla anterior de DATE de ODBC.

Trivial Se proporcionan los valores predeterminados. Se proporcionan los valores predeterminados.

Se usa la parte DATE de la cadena de entrada. No permitido.

Se proporcionan los valores predeterminados.

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 time date smalldatetime datetime datetime2 datetimeoffset

Salida 12:35:29. 1234567 2007-05-08 2007-05-08 12:35:00 2007-05-08 12:35:29.123 2007-05-08 12:35:29. 1234567 2007-05-08 12:35:29.1234567 +12:15

Vea tambin
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 da 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 estndar SQL. Son ms porttiles. time , datetime2 y datetimeoffset proporcionan una mayor precisin de segundos. datetimeoffset proporciona compatibilidad de zona horaria para las aplicaciones implementadas globalmente.

Descripcin de datetime
Propiedad Sintaxis Uso Valor datetime DECLARE @MyDatetime datetime CREATE TABLE Table1 ( Column1 datetime ) No aplicable

Formatos de literal de cadena predeterminados (se usan para el cliente de nivel inferior) Intervalo de fechas Intervalo de horas Intervalo de ajuste de zona

Del 1 de enero de 1753 hasta el 31 de diciembre de 9999 De 00:00:00 a 23:59:59.997 Ninguno

horaria Intervalos de elementos AAAA es una cifra de cuatro dgitos comprendida entre 1753 y 9999 que representa un ao. MM es una cifra de dos dgitos comprendida entre 01 y 12 que representa un mes del ao especificado. DD es una cifra de dos dgitos comprendida entre 01 y 31 dependiendo del mes, que representa un da del mes especificado. hh es una cifra de dos dgitos comprendida entre 00 y 23 que representa la hora. mm es una cifra de dos dgitos comprendida entre 00 y 59 que representa los minutos. s es una cifra de dos dgitos comprendida entre 00 y 59 que representa los segundos. n* es una cifra de cero a tres dgitos comprendida entre 0 y 999 que representa las fracciones de segundos. 19 posiciones como mnimo a 23 como mximo 8 bytes Se redondea en incrementos de 0,000, 0,003 o 0.007 segundos 1900-01-01 00:00:00 Gregoriano (no incluye el intervalo completo de aos.) No

Longitud de los caracteres Tamao de almacenamiento Precisin

Valor predeterminado Calendario Precisin de fracciones de segundo definida por el usuario Conservacin y reconocimiento del ajuste de zona horaria Reconocimiento del horario de verano

No

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 estn incluidos entre

comillas simples ('), por ejemplo 'string_literaL.' Si el entorno no es us_english, los literales de cadena deberan estar en el formato N'string_literaL'.

Numrico 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:30 14:30[:20:999] 14:30[:20.9] 4am 4 PM Alfabtico Abr[il] [15][,] 1996 Abr[il] 15[,] [19]96 Abr[il] 1996 [15] [15] Abr[il][,] 1996 15 Abr[il][,][19]96 15 [19]96 abr[il] [15] 1996 abr[il] 1996 ABR[IL]

Descripcin Puede especificar datos de fecha con un mes en forma de nmero. Por ejemplo, 5/20/97 representa el veinte de mayo de 1997. Cuando use un formato numrico de fecha, especifique el mes, el da y el ao en una cadena con barras diagonales (/), guiones (-) o puntos (.) como separadores. Esta cadena debe aparecer de la forma siguiente: nmero separador nmero separador number [time] [time] Cuando el idioma establecido es us_english, el orden predeterminado de la fecha es mdy (mes, da, ao). Para cambiar el orden de la fecha, utilice la instruccin SET DATEFORMAT. La configuracin de SET DATEFORMAT determina cmo se interpretan los valores de fecha. Si el orden no coincide con esta configuracin, los valores no se interpretarn como fechas porque se encuentran fuera del intervalo, o bien se interpretarn incorrectamente. Por ejemplo, 12/10/08 se puede interpretar de seis formas distintas, en funcin de la configuracin de DATEFORMAT. Un ao en cuatro partes se interpreta como el ao.

Descripcin 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 maysculas. stas son algunas directrices para utilizar los formatos alfabticos de fecha: Incluya los datos de fecha y hora entre comillas simples ('). Para los idiomas distintos de ingls, utilice N' Los caracteres que se incluyen entre corchetes son opcionales. Si solo especifica los dos ltimos dgitos del ao, los valores inferiores a los dos ltimos dgitos del valor de la opcin de configuracin Establecer la opcin de configuracin del servidor Fecha lmite de ao de dos dgitos pertenecen al mismo siglo que el ao lmite.Los valores mayores o iguales que el valor de esta

[15] 1996 [15] ABR[IL]

opcin pertenecen al siglo anterior al ao lmite. Por ejemplo, si el valor de Fecha lmite de ao de dos dgitos es 2050 (el valor predeterminado), 25 se interpreta como 2025 y 50 se interpreta como 1950. Para evitar la ambigedad, utilice aos de cuatro dgitos. Si falta el da, se usar el primer da del mes. El parmetro de sesin SET DATEFORMAT no se aplica cuando se especifica el mes de forma alfabtica. Descripcin 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 tambin incluye T, los dos puntos (:) y el punto (.) que se muestran en el formato. Los corchetes indican que el componente de fraccin 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 estndar internacional con una especificacin que evita ambigedades. Asimismo, este formato no se ve afectado por la configuracin de SET DATEFORMAT o SET LANGUAGE. Descripcin

ISO 8601 AAAA-MMDDThh:mm:ss[.mmm] AAAMMDD[ hh:mm:ss[.mmm]]

Sin separacin AAAAMMDD hh:mm:ss[.mmm] ODBC { ts '199805-02 01:23:56.123' } { d '1990-1002' } { t '13:33:41' }

Descripcin 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 definicin del lenguaje OLE DB (DBGUID-SQL) aceptada por el proveedor OLE DB de Microsoft para SQL Server tambin 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 fecha

t = solo hora 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 d t ts

o o

formato constant_value aaaa-mm-dd hh:mm:ss[.fff] yyyy-mm-dd hh:mm:ss[.fff]

Redondeo de precisin 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 01/01/98 23:59:59.999 01/01/98 23:59:59.995 01/01/98 23:59:59.996 01/01/98 23:59:59.997 01/01/98 23:59:59.998 01/01/98 23:59:59.992 01/01/98 23:59:59.993 01/01/98 23:59:59.994 01/01/98 23:59:59.990 01/01/98 23:59:59.991

Valor almacenado por el sistema 1998-01-02 00:00:00.000 1998-01-01 23:59:59.997

1998-01-01 23:59:59.993

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 informacin acerca de cmo 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 hora


En 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 date

Detalles de la conversin Se copian los valores de ao, mes y da. El componente de hora se establece en 00:00:00.000. El cdigo 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 precisin de las fracciones del valor de time(n) es superior a tres dgitos, 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 cdigo 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 precisin de las fracciones del valor de datetimeoffset(n) es superior a tres dgitos, 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 precisin de las fracciones del valor datetime2(n)es superior a tres dgitos, 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 time date smalldatetime datetime datetime2 datetimeoffset

Salida 12:35:29. 1234567 2007-05-08 2007-05-08 12:35:00 2007-05-08 12:35:29.123 2007-05-08 12:35:29. 1234567 2007-05-08 12:35:29.1234567 +12:15

datetimeoffset (Transact-SQL)
SQL Server 2012 Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema Define una fecha que se combina con una hora del da con reconocimiento de zona horaria y basado en un reloj de 24 horas.

Descripcin de datetimeoffset
Propiedad Sintaxis Uso Valor datetimeoffset [ (fractional seconds precision) ] DECLARE @MyDatetimeoffset datetimeoffset(7) CREATE TABLE Table1 ( Column1 datetimeoffset(7) ) AAAA-MM-DD hh:mm:ss[. nnnnnnn] [{+|-}hh:mm] Para obtener ms informacin, vea la seccin "Compatibilidad con versiones anteriores de los clientes de niveles inferiores" ms adelante.

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

De 0001-01-01 a 9999-12-31 Del 1 de enero del ao 1 despus de Cristo al 31 de diciembre de 9999 De 00:00:00 a 23:59:59.9999999 De -14:00 a +14:00

Intervalo de horas Intervalo de ajuste de zona horaria Intervalos de elementos

AAAA es una cifra de cuatro dgitos comprendida entre 0001 y 9999 que representa un ao. MM es una cifra de dos dgitos comprendida entre 01 y 12 que representa un mes del ao especificado.

DD es una cifra de dos dgitos comprendida entre 01 y 31 dependiendo del mes, que representa un da del mes especificado. hh es una cifra de dos dgitos comprendida entre 00 y 23 que representa la hora. mm es una cifra de dos dgitos comprendida entre 00 y 59 que representa los minutos. s es una cifra de dos dgitos comprendida entre 00 y 59 que representa los segundos. n* es una cifra de cero a siete dgitos comprendida entre 0 y 9999999 que representa las fracciones de segundos. hh es una cifra de dos dgitos comprendida entre -14 y 14. mm es una cifra de dos dgitos comprendida entre 00 y 59. Longitud de los caracteres De 26 posiciones como mnimo (AAAA-MM-DD hh:mm:ss {+|}hh:mm) a 34 como mximo (AAAA-MM-DD hh:mm:ss. nnnnnnn {+|}hh:mm) Precisin de fracciones de segundo 7 0-2 0-2 0-2 3-4 3-4 5-7 5-7 5-7

Precisin, escala Escala especificada Resultado (precisin, escala) Longitud de la columna (bytes) 10 8 8 8 9 9 10 10 10

datetimeoffset datetimeoffset(0) datetimeoffset(1) datetimeoffset(2) datetimeoffset(3) datetimeoffset(4) datetimeoffset(5) datetimeoffset(6) datetimeoffset(7) Tamao de almacenamiento

(34,7) (26,0) (28,1) (29,2) (30,3) (31,4) (32,5) (33,6) (34,7)

10 bytes, fijo es el valor predeterminado con el valor predeterminado de 100 ns de precisin de fracciones de segundo.

Precisin Valor predeterminado Calendario Precisin de fracciones de segundo definida por el usuario Conservacin y reconocimiento del ajuste de zona horaria Reconocimiento del horario de verano

100 nanosegundos 1900-01-01 00:00:00 00:00

Gregoriano S

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 informacin sobre los formatos alfabtico, numrico, sin separacin y de hora para las partes de fecha y hora de datetimeoffset, vea date (TransactSQL) y hora (Transact-SQL).

ISO 8601 AAAA-MMDDThh:mm:ss[.nnnnnnn][{+|}hh:mm]

Descripcin Estos dos formatos no se ven afectados por la configuracin regional de sesin de SET LANGUAGE y SET DATEFORMAT. No se permiten espacios entre las partes datetimeoffsety datetime. Este formato por definicin de ISO indica que la parte datetime se debera expresar en Hora universal coordinada (Hora UTC). Por ejemplo, 1999-12-12 12:30:30.12345 -07: 00 se deberan representar como 1999-12-12 19:30:30.12345 Z.

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

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 dgitos comprendidos entre 00 a 14 y representa el nmero de horas en el ajuste de zona horaria. mm es una cifra de dos dgitos comprendidos entre 00 a 59 y representa el nmero minutos adicionales en el ajuste de zona horaria. + (ms) 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 vlido 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 definicin del esquema XSD y es ligeramente diferente de la definicin estndar de SQL 2003, de 12:59 a +14: 00. El parmetro de tipo opcional fractional seconds precision especifica el nmero de dgitos 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 dgitos 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 recuperacin. 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 validarn durante las operaciones de insercin, actualizacin, aritmtica, conversin o asignacin. La deteccin de cualquier valor UTC o local datetime no vlido (al desplazamiento de la zona horario persistente o convertido) generar un error de valor no vlido. Por ejemplo, 9999-12-31 10:10:00 son vlidos 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 asignacin 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

ODBC de nivel inferior

OLEDB de nivel inferior

JDBC de nivel infer

nivel inferior time hh:mm:ss[. nnnnnnn] SQL_WVARCHAR o SQL_VARCHAR SQL_WVARCHAR o SQL_VARCHAR SQL_WVARCHAR o SQL_VARCHAR SQL_WVARCHAR o SQL_VARCHAR DBTYPE_WSTR o DBTYPE_STR DBTYPE_WSTR o DBTYPE_STR DBTYPE_WSTR o DBTYPE_STR DBTYPE_WSTR o DBTYPE_STR

Java.sql.St

date

AAAA-MM-DD

Java.sql.St

datetime2

AAAA-MM-DD hh:mm:ss[. nnnnnnn] AAAA-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm

Java.sql.St

datetimeoffset

Java.sql.St

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 informacin acerca de cmo 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 hora


En 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 date

Detalles de la conversin Se copian los valores de ao, mes y da. El cdigo 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 precisin del valor de datetimeoffset(n) es mayor que la precisin del valor detime(n), el valor se redondea.

El cdigo 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 precisin de las fracciones del valor de datetimeoffset(n) es superior a tres dgitos, el valor se trunca. El cdigo 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 cdigo 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 precisin del valor de datetime2(n) es mayor que la precisin del valor de datetimeoffset(n), el valor de las fracciones de segundo se trunca para ajustarse. El cdigo 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 datetimeoffset


Las conversiones de literales de cadena en tipos de fecha y hora son posibles cuando todas las partes de las cadenas estn en formatos vlidos. En caso contrario, se generar un error en el tiempo de ejecucin. Las conversiones implcitas o explcitas que no especifican un estilo (desde tipos de fecha y hora hasta literales de cadena) estarn en el formato predeterminado de la sesin 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 DATE de ODBC

datetimeoffset(n)

Los literales de cadena de ODBC se asignan al tipo de datos datetime. Cualquier operacin de asignacin de los literales de DATETIME de ODBC a tipos datetimeoffset provocar una conversin implcita entre datetime y este tipo, tal y como se define en las reglas de conversin. Vea la regla anterior de DATE de ODBC.

TIME de ODBC DATETIME de ODBC Solo DATE

Vea la regla anterior de DATE de ODBC.

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

Solo TIME

tendr como valor predeterminado +00:00. Solo TIMEZONE DATE + TIME DATE + TIMEZONE TIME + TIMEZONE DATE + TIME + TIMEZONE Se proporcionan los valores predeterminados.

TIMEZONE tiene como valor predeterminado +00:00. No permitido

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

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 Time Date Smalldatetime Datetime

Salida 12:35:29. 1234567 2007-05-08 2007-05-08 12:35:00 2007-05-08 12:35:29.123

datetime2 Datetimeoffset

2007-05-08 12:35:29. 1234567 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 da. La hora est en un formato de da 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 estndar SQL. Son ms porttiles. time , datetime2 y datetimeoffset proporcionan una mayor precisin de segundos. datetimeoffset proporciona compatibilidad de zona horaria para las aplicaciones implementadas globalmente.

Descripcin de smalldatetime
Sintaxis Uso smalldatetime DECLARE @MySmalldatetime smalldatetime CREATE TABLE Table1 ( Column1 smalldatetime ) No aplicable

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

De 1900-01-01 a 2079-06-06 Del 1 de enero de 1900 hasta el 6 de junio de 2079 De 00:00:00 a 23:59:59 2007-05-09 23:59:59 se redondear a 2007-05-10 00:00:00 AAAA es una cifra de cuatro dgitos comprendida entre 1900 y

Intervalo de horas

Intervalos de elementos

2079 que representa un ao. MM es una cifra de dos dgitos comprendida entre 01 y 12 que representa un mes del ao especificado. DD es una cifra de dos dgitos comprendida entre 01 y 31 dependiendo del mes, que representa un da del mes especificado. hh es una cifra de dos dgitos comprendida entre 00 y 23 que representa la hora. mm es una cifra de dos dgitos comprendida entre 00 y 59 que representa los minutos. ss es una cifra de dos dgitos 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 ms cercano; los valores de 29,999 segundos o ms se redondean al alza hasta el minuto ms cercano. Longitud en caracteres Tamao de almacenamiento Precisin Valor predeterminado Calendario 19 posiciones como mximo 4 bytes, fijo.

Un minuto 1900-01-01 00:00:00 Gregoriano (no incluye el intervalo completo de aos.) No

Precisin de fracciones de segundo definida por el usuario Conservacin y reconocimiento del desplazamiento de zona horaria Reconocimiento del horario de verano

No

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 informacin acerca de cmo 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 hora


En 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 date

Detalles de la conversin Se copian los valores de ao, mes y da. El cdigo 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 cdigo 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 cdigo 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 fracc de segundo se establecen en 0 y el ajuste de zona horaria se establece en +00: En el cdigo 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 fraccione segundo se establecen en 0. En el cdigo 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( --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 smalldatetime
En el ejemplo siguiente se compara la conversin 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 2007-05-08 12:35:29 2007-05-08 12:35:30 2007-05-08 12:59:59.998

Salida 2007-05-08 12:35:00 2007-05-08 12:36:00 2007-05-08 13:00:00

B.Comparar tipos de datos de fecha y hora


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

Tipo de datos time date smalldatetime datetime datetime2 datetimeoffset

Resultados 12:35:29. 1234567 2007-05-08 2007-05-08 12:35:00 2007-05-08 12:35:29.123 2007-05-08 12:35:29. 1234567 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 da. La hora no distingue la zona horaria y est basada en un reloj de 24 horas.

Descripcin de time
Propiedad Sintaxis Uso Valor time [ (fractional second precision) ] DECLARE @MyTime time(7) CREATE TABLE Table1 ( Column1 time(7) ) Especifica el nmero de dgitos de la parte fraccionaria de los segundos. Este valor puede ser un entero de 0 a 7. La precisin predeterminada de las fracciones es 7 (100 ns). hh:mm:ss[. nnnnnnn] Para obtener ms informacin, vea la seccin "Compatibilidad con versiones anteriores de los clientes de niveles inferiores" ms adelante.

fractional seconds precision

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

De 00:00:00.0000000 a 23:59:59.9999999 hh es una cifra de dos dgitos, comprendida entre 0 y 23, que representa la hora. mm es una cifra de dos dgitos, comprendida entre 0 y 59, que representa los minutos. ss es una cifra de dos dgitos, comprendida entre 0 y 59, que representa los segundos. n* es una cifra de cero a siete dgitos, comprendida entre 0 y 9999999,

que representa las fracciones de segundos. Longitud de caracteres Precisin, escala (el usuario especifica solo la escala) De 8 posiciones como mnimo (hh:mm:ss) a 16 como mximo (hh:mm:ss.nnnnnnn) Longitud de la columna (bytes) 5 3 3 3 4 4 5 5 5

Escala especificada

Resultado (precisin, escala) (16,7) (8,0) (10,1) (11,2) (12,3) (13,4) (14,5) (15,6) (16,7)

Fracciones segundos precisin 7 0-2 0-2 0-2 3-4 3-4 5-7 5-7 5-7

time time(0) time(1) time(2) time(3) time(4) time(5) time(6) time(7) Tamao de almacenamiento Precisin Valor predeterminado

5 bytes (fijo) es el valor predeterminado con el valor predeterminado de 100 ns de precisin de fracciones de segundo. 100 nanosegundos 00:00:00 Este valor se usa en la parte de hora anexada para la conversin implcita de date a datetime2 o datetimeoffset. S

Precisin de fracciones de segundo definida por el usuario

Conservacin y reconocimiento del ajuste de zona horaria Reconocimiento del horario de verano

No

No

Formatos de literales de cadena compatibles para time


En la siguiente tabla se muestran los formatos de literales de cadena vlidos para el tipo de datos time.

SQL Server hh:mm[:ss][:fracciones de segundo][AM][PM] hh:mm[:ss][.fracciones de segundo][AM][PM] hhAM[PM] hh AM[PM]

Descripcin 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 medioda si no se especifica AM ni PM. Si se especifica AM, los valores representan las horas antes del medioda. Si se especifica PM, los valores representan las horas despus del medioda. El valor de hora 12 representa el medioda 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 medioda. Por ejemplo, 12:01 es 1 minuto despus del medioda, igual que 12:01 PM, mientras que 12:01 AM es 1 minuto despus 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 despus del medioda si no se especifica AM o PM. Si se especifica PM, los valores tambin representan las horas despus del medioda. No es posible especificar AM si el valor de hora es de 13 a 23. Un valor de hora de 24 no es vlido. 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 nmero indica milsimas de segundo. Si se usa un punto, un nico dgito indica dcimas de segundo, dos dgitos indica centsimas de segundo y tres dgitos indica milsimas de segundo.Por ejemplo, 12:30:20:1 indica las 12:30, 20 segundos y una milsima; 12:30:20.1 indica las 12:30, 20 segundos y una dcima.

ISO 8601 hh:mm:ss hh:mm[:ss][.fracciones de segundo]

Notas

hh es una cifra de dos dgitos, de 0 a 14, que representa el nmero de horas de ajuste de zona horaria. mm es una cifra de dos dgitos, de 0 a 59, que representa el nmero de minutos adicionales en el ajuste de zona horaria. Notas Especfico de la API de ODBC. Funciona en SQL Server 2012 como en SQL Server 2005.

ODBC {t 'hh:mm:ss[.fracciones de segundo]'}

Compatibilidad con las normas ANSI e ISO 8601


No se admite el uso de la hora 24 para representar la medianoche y la insercin de un segundo intercalar respecto a 59, como se define en el estndar 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 estndar SQL, definido como hh:mm:ss[. nnnnnnn]. Este formato es similar a la definicin 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 asignacin 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 hh:mm:ss[. nnnnnnn]

ODBC de nivel inferior

OLEDB de nivel inferior

JDBC de nivel infer

time

SQL_WVARCHAR o SQL_VARCHAR SQL_WVARCHAR o SQL_VARCHAR

DBTYPE_WSTR o DBTYPE_STR DBTYPE_WSTR o DBTYPE_STR

Java.sql.St

date

AAAA-MM-DD

Java.sql.St

datetime2

AAAA-MM-DD hh:mm:ss[. nnnnnnn] AAAA-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm

SQL_WVARCHAR o SQL_VARCHAR SQL_WVARCHAR o SQL_VARCHAR

DBTYPE_WSTR o DBTYPE_STR DBTYPE_WSTR o DBTYPE_STR

Java.sql.St

datetimeoffset

Java.sql.St

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 informacin acerca de cmo 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 hora


En 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 time(n)

Detalles de la conversin Se copian los valores de hora, minuto y segundo. Cuando la precisin de destino es menor que la precisin de origen, las fracciones de segundo se redondean para ajustarse a la precisin 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 conversin no se produce y se recibe el mensaje de error 206: "Conflicto de tipos de operandos: date es incompatible con time". Se copian los valores de hora, minuto y segundo, y el componente de fecha se establece en '1900-01-01'. Cuando la precisin de las fracciones de segundo del valor de time(n)es superior a tres dgitos, el resultado de datetime se truncar. El cdigo siguiente muestra los resultados de convertir un valor de time(4) en un valor de datetime.
DECLARE @time time(4) = '12:15:04.1237';

datetime

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 cdigo 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 precisin de las fracciones de segundo del valor detime(n) es mayor que la precisin 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 precisin 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 estn en formatos vlidos. En caso contrario, se generar un error en el tiempo de ejecucin. Las conversiones implcitas o explcitas que no especifican un estilo (desde tipos de fecha y hora hasta literales de cadena) estarn en el formato predeterminado de la sesin 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 DATE de ODBC

Regla de conversin

Los literales de cadena de ODBC se asignan al tipo de datos datetime. Cualquier operacin de asignacin de los literales de DATETIME de ODBC a tipos time provocarn una conversin implcita entre datetime y este tipo, tal y como se define en las reglas de conversin. Vea la regla de DATE de ODBC anterior.

TIME de ODBC DATETIME de ODBC Solo DATE Solo TIME

Vea la regla de DATE de ODBC anterior.

Se proporcionan los valores predeterminados. Trivial

Solo TIMEZONE DATE + TIME DATE + TIMEZONE TIME + TIMEZONE DATE + TIME + TIMEZONE

Se proporcionan los valores predeterminados.

Se usa la parte de TIME de la cadena de entrada. No permitido.

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

Se usar la parte de TIME de DATETIME local.

Ejemplos
A.Comparar tipos de datos de fecha y hora
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';

Tipo de datos time date smalldatetime datetime datetime2 datetimeoffset

Salida 12:35:29. 1234567 2007-05-08 2007-05-08 12:35:00 2007-05-08 12:35:29.123 2007-05-08 12:35:29. 1234567 2007-05-08 12:35:29.1234567 +12:15

B.Insertar literales de cadena time vlidos 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 SQL Server

Literal de cadena insertado

Valor de time(7) almacenado

Descripcin

'01:01:01:123AM'

01:01:01.1230000

Si dos puntos (:) preceden la precisin en fracciones de segundo, la escala no puede tener ms de tres posiciones ya que, de lo contrario, se producir un error. Si se especifica AM o PM, la hora se almacenar en formato de 24 horas sin el literal AM o PM Si se especifica AM o PM, la hora se almacenar en formato de 24 horas sin el literal AM o PM El espacio antes de AM o PM es opcional. Si solo se especifica la hora, todos los dems valores son 0. El espacio antes de AM o PM es opcional. Si no se especifican las fracciones de segundo, cada posicin definida por el tipo de datos ser 0. Para cumplir las especificaciones del estndar ISO 8601, use el

SQL Server

'01:01:01.1234567 AM'

01:01:01.1234567

SQL Server

'01:01:01.1234567 PM'

13:01:01.1234567

SQL Server SQL Server

'01:01:01.1234567PM'

13:01:01.1234567

'01AM'

01:00:00.0000000

SQL Server SQL Server

'01 AM'

01:00:00.0000000

'01:01:01'

01:01:01.0000000

ISO 8601

'01:01:01.1234567'

01:01:01.1234567

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 time


En 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 '12:12:12.1234567'

Tipo de datos de columna time(7)

Valor almacenado en la columna 12:12:12.1234567

Descripcin Si la precisin en fracciones de segundo supera el valor especificado en la columna, la cadena quedar truncada y no generar un error. Cualquier valor de time producir un error en la instruccin INSERT. Cualquier valor de precisin en fracciones de segundo producir un error en la instruccin INSERT. Cualquier precisin en segundos de ms de tres posiciones producir un error en la instruccin INSERT.

'2007-05-07'

date

NULL

'12:12:12'

smalldatetime

1900-01-01 12:12:00

'12:12:12.123'

datetime

1900-01-01 12:12:12.123

'12:12:12.1234567'

datetime2(7)

1900-01-01 12:12:12.1234567

Si la precisin en fracciones de segundo supera el valor especificado en la columna, la cadena quedar truncada y no generar un error. Si la precisin 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

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 tamao de almacenamiento es de n bytes. El sinnimo 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 tamao mximo de almacenamiento es de 2^31-1 bytes (2 GB). El tamao de almacenamiento es la longitud real de los datos especificados + 2 bytes. Los sinnimos ISO de varcharson char varying o character varying.

Comentarios
Cuando no se especifica n en una instruccin de definicin de datos o declaracin 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 intercalacin predeterminada de la base de datos, a menos que se asigne una intercalacin especfica mediante la clusula COLLATE. La intercalacin controla la pgina de cdigos 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 mnimo los problemas de conversin de caracteres. Si usa char o varchar, siga estas recomendaciones: Utilice char cuando los tamaos de las entradas de datos de columna sean consistentes. Utilice varchar cuando los tamaos de las entradas de datos de columna varen de forma considerable. Utilice varchar(max) cuando los tamaos de las entradas de datos de columna varen 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 pgina de cdigos de la intercalacin utiliza caracteres de doble byte, el tamao de almacenamiento sigue siendo de n bytes. Dependiendo de la cadena de caracteres, el tamao 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 tamao distinto, se truncan los valores que son demasiado grandes para el nuevo tipo de datos. El tipo uniqueidentifier se considera un tipo de carcter para la conversin desde una expresin de caracteres y, por tanto, est sujeto a las reglas de truncamiento para la conversin a un tipo de carcter. Vea la seccin Ejemplos que aparece ms adelante. Cuando una expresin de caracteres se convierte a una expresin de caracteres de un tipo de datos o tamao distinto (como de char(5) a varchar(5) o de char(20) a char(15)), se asigna la intercalacin del valor de entrada al valor convertido. Si una expresin que no es de carcter se convierte a un tipo de datos de carcter, se asigna al valor convertido la intercalacin predeterminada de la base de datos actual. En cualquiera de los casos, puede asignar una intercalacin especfica mediante la clusula COLLATE.

Nota

Las traducciones de pginas de cdigos 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 prdidas de datos durante las conversiones de la pgina de cdigos no se notifican.
Las expresiones de carcter que se convierten a un tipo de datos numeric aproximado pueden incluir una notacin exponencial opcional (una e minscula o una E mayscula seguida de un signo ms (+) o menos (-) opcional y un nmero). Las expresiones de carcter que se convierten a un tipo de datos numeric exacto se componen de dgitos, un separador decimal y un signo ms (+) 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 tambin un separador decimal opcional y un smbolo de dlar ($). Los separadores de coma (por ejemplo, $123,456.00) estn permitidos.

Ejemplos
A.Mostrar el valor predeterminado de n cuando se usa en una declaracin 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 declaracin de variable. DECLARE @myVariable AS varchar = 'abc'; DECLARE @myNextVariable AS char = 'abc'; --The following returns 1 SELECT DATALENGTH(@myVariable), DATALENGTH(@myNextVariable); GO

B.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 mostrarlos

En 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 dgitos a la izquierda del separador decimal y dos dgitos 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 clusula WHERE, un tipo money se convierte en un tipo de caracteres para realizar una operacin de comparacin de cadenas. USE AdventureWorks2012; GO SELECT BusinessEntityID, SalesYTD, CONVERT (varchar(12),SalesYTD,1) AS MoneyDisplayStyle1, GETDATE() AS CurrentDate, CONVERT(varchar(12), GETDATE(), 3) AS DateDisplayStyle3 FROM Sales.SalesPerson WHERE 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/11 280 1352577.1325 1,352,577.13 2011-05-07 14:29:01.193 07/05/11 283 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/11 285 172524.4512 172,524.45 2011-05-07 14:29:01.193 07/05/11 286 1421810.9242 1,421,810.92 2011-05-07 14:29:01.193 07/05/11 288 1827066.7118 1,827,066.71 2011-05-07 14:29:01.193 07/05/11

D.Convertir datos Uniqueidentifier

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-9960E1C80E27ABA0 (1 row(s) affected)

ntext, text e image (TransactSQL)


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 quitarn en una versin 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 tamao 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 mxima de cadena de 2^30 - 1 (1.073.741.823) bytes. El tamao de almacenamiento, en bytes, es dos veces la longitud de cadena especificada. El sinnimo de ntexten ISO es national text. text

Datos no Unicode de longitud variable en la pgina de cdigos del servidor y con una longitud mxima de cadena de 2^31-1 (2.147.483.647). Cuando la pgina de cdigos 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 DATALENGTH (Transact-SQL) PATINDEX (Transact-SQL) SUBSTRING (Transact-SQL) TEXTPTR (Transact-SQL) TEXTVALID (Transact-SQL)

Instrucciones READTEXT (Transact-SQL) SET TEXTSIZE (Transact-SQL) UPDATETEXT (Transact-SQL) WRITETEXT (Transact-SQL)

Vea tambin

nchar y nvarchar (TransactSQL)


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 tamao de almacenamiento es dos veces n bytes. Si la pgina de cdigos de la intercalacin utiliza caracteres de doble byte, el tamao de almacenamiento sigue siendo de n bytes. Dependiendo de la cadena, el tamao de almacenamiento de n bytes puede ser inferior al valor especificado para n. Los sinnimos 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 tamao mximo de almacenamiento es de 2^31-1 bytes (2 GB). El tamao de almacenamiento, en bytes, es dos veces la longitud real de los datos especificados + 2 bytes. Los sinnimos ISO de nvarchar son national char varying y national character varying.

Comentarios
Cuando no se especifica n en una instruccin de definicin de datos o declaracin de variable, la longitud predeterminada es 1. Cuando no se especifica n con la funcin CAST, la longitud predeterminada es 30. Use nchar cuando sea probable que el tamao de las entradas de datos de las columnas sea similar. Use nvarchar cuando sea probable que el tamao de las entradas de datos de las columnas vare. 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 intercalacin predeterminada de la base de datos, a menos que se asigne una intercalacin especfica por medio de la clusula 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 informacin acerca de cmo convertir datos de caracteres, vea char y varchar (Transact-SQL).

binary y varbinary (TransactSQL)


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 tamao 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 tamao mximo de almacenamiento es de 2^31-1 bytes. El tamao de almacenamiento es la longitud real de los datos especificados + 2 bytes. Los datos especificados pueden tener una longitud de 0 bytes. El sinnimo de ANSI SQL para varbinary es binary varying.

Comentarios
Cuando no se especifica el argumento n en una instruccin de definicin de datos o de declaracin de variable, la longitud predeterminada es 1. Cuando no se especifica n con la funcin CAST, la longitud predeterminada es 30. Utilice binary cuando los tamaos de las entradas de datos de columna sean coherentes. Use varbinary cuando los tamaos de las entradas de datos de columna varen 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 conversin de datos a tipos de datos binary y varbinary es til si el dato binary es la forma ms sencilla de mover datos. Cuando se convierte un valor de cualquier tipo a un valor binario de tamao suficiente y, a continuacin, se convierte de nuevo al tipo original, el resultado ser el mismo valor si ambas conversiones utilizan la misma versin de SQL Server. La representacin 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 instruccin 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 instruccin SELECT se muestra que, si el destino de tipo binary es demasiado pequeo para contener el valor completo, los dgitos a la izquierda se truncarn sin avisar; de esta forma, el mismo nmero se almacena como 0xe240:
SELECT CAST( 123456 AS BINARY(2) );

El siguiente lote muestra que este truncamiento puede afectar a las operaciones aritmticas sin generar un error:
DECLARE @BinaryVariable2 BINARY(2); SET @BinaryVariable2 = 123456; SET @BinaryVariable2 = @BinaryVariable2 + 1; SELECT CAST( @BinaryVariable2 AS INT); GO

El 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 tambin
Referencia
CAST y CONVERT (Transact-SQL) Tipos de datos (Transact-SQL)

Conceptos
Conversiones 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 an no ha recibido ninguna valoracin - Valorar este tema Un tipo de datos para las variables o para los parmetros 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 parmetros 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 parmetros de resultado de procedimientos almacenados. La funcin CURSOR_STATUS. Los procedimientos almacenados del sistema sp_cursor_list, sp_describe_cursor, sp_describe_cursor_tablesy sp_describe_curs or_columns.

Importante

El tipo de datos cursor no se puede utilizar para una columna en una instruccin CREATE TABLE.
Nota

En esta versin 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 tambin
Referencia
CAST 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)

Conceptos
Conversiones de tipos de datos (motor de b

hierarchyid (Transact-SQL)
SQL Server 2012 Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema El tipo de datos del sistema de hierarchyid es de longitud variable. Use hierarchyid para representar la posicin en una jerarqua. Una columna de tipo hierarchyid no representa automticamente un rbol. Depender de la aplicacin generar y asignar los valores hierarchyid de tal forma que la relacin deseada entre las filas se refleje en los valores. Un valor del tipo de datos hierarchyid representa una posicin en una jerarqua de rbol. Los valores dehierarchyid tienen las siguientes propiedades. Muy compactos El nmero 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 pequeos (0-7), el tamao es aproximadamente 6*logAn bits, donde A es el promedio de nodos secundarios. Un nodo en una jerarqua 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 comparacin se realiza con prioridad a la profundidad Dados 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 estn 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 ms informacin, consulte Datos jerrquicos (SQL Server). Compatibilidad con inserciones y eliminaciones arbitrarias Con el mtodo 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 nmero arbitrario de nodos de la jerarqua. La mayora de las inserciones y eliminaciones conservan la propiedad compactness. Sin embargo, las inserciones entre dos nodos generarn valores hierarchyid con una representacin ligeramente menos compacta. La codificacin usada en el tipo hierarchyid est limitada a 892 bytes. Por consiguiente, el tipo hierarchyidno podr representar los nodos con demasiados niveles en su representacin 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 lgicamente la informacin de un nodo nico en un rbol de jerarqua mediante la codificacin de la ruta de acceso desde la raz del rbol hasta el nodo. Este tipo de ruta de acceso se representa lgicamente como una secuencia de etiquetas de nodo de todos los elementos secundarios visitados despus de la raz. Una barra diagonal inicia la representacin y una barra diagonal nica representa una ruta de acceso que solo visita la raz. Para los niveles por debajo de la raz, cada etiqueta se codifica como una secuencia de enteros separados por puntos. La comparacin entre los elementos secundarios se realiza comparando las secuencias de enteros separados por puntos en orden alfabtico. 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 ubicacin. Los nodos insertados despus de /1/2/ pero antes de /1/3/pueden representarse como /1/2.5/. Los nodos insertados antes de 0 tienen la representacin lgica de un nmero 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 vlido, pero /1/1.01/ no lo es. Para evitar errores, inserte los nodos utilizando el mtodo GetDescendant.

Conversin de tipo de datos


El tipo de datos hierarchyid puede convertirse a otros tipos de datos de la siguiente manera: Use el mtodo ToString() para convertir el valor hierarchyid a la representacin lgica como un tipo de datos nvarchar(4000). Use Read () y Write () para convertir hierarchyid a varbinary. No se admite la conversin desde hierarchyid a XML. Para transmitir los parmetros hierarchyid a travs de SOAP, convirtalos previamente a cadenas. Se producir un error en una consulta con la clusula FOR XML en una tabla con hierarchyid a menos que la columna se convierta previamente en un tipo de datos carcter.

Actualizar bases de datos


Cuando se actualiza una base de datos a SQL Server 2012, se instalarn automticamente el nuevo ensamblado y el tipo de datos hierarchyid. Las reglas de asesor de actualizaciones detectan tipos de usuario o ensamblados con nombres problemticos. El asesor de actualizaciones aconsejar el cambio de nombre de los ensamblados problemticos, y el cambio de nombre de los tipos problemticos o la utilizacin de nombres de dos partes en el cdigo para hacer referencia al tipo de usuario preexistente. Si una actualizacin de la base de datos detecta un ensamblado del usuario con un nombre problemtico, cambiar automticamente el nombre del ensamblado y colocar la base de datos en modo sospechoso.

Si durante la actualizacin se encuentra un tipo de usuario con un nombre problemtico, no se llevar a cabo ningn procedimiento especial. Despus de la actualizacin, existirn tanto el tipo de usuario anterior como el nuevo tipo de sistema. El tipo de usuario solo estar disponible a travs 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 aplicacin dependen de si la replicacin es unidireccional o bidireccional, y de las versiones de SQL Server usadas.

Replicacin unidireccional
La replicacin unidireccional incluye la replicacin de instantneas, replicacin transaccional y replicacin de mezcla en las que las modificaciones no se realizan en el suscriptor. El funcionamiento de las columnashierachyid con la replicacin unidireccional depende de la versin 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 consideracin 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 versin 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, todava puede replicar los datos a un suscriptor. Para ello, debe establecer una opcin de esquema o el nivel de compatibilidad de la publicacin (para la replicacin 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.

Replicacin bidireccional
La replicacin bidireccional incluye la replicacin transaccional con suscripciones de actualizacin, replicacin transaccional del mismo nivel y replicacin de mezcla en la que se realizan los cambios en el suscriptor. La replicacin le permite configurar una tabla con columnas hierarchyid para la replicacin bidireccional. Tenga en cuenta los siguientes requisitos y consideraciones. El publicador y todos los suscriptores deben ejecutar SQL Server 2012. La replicacin replica los datos como bytes y no realiza ninguna validacin para garantizar la integridad de la jerarqua. No se mantiene la jerarqua de las modificaciones realizadas en el origen (suscriptor o publicador) cuando se replican en el destino. Los valores hash de las columnas hierarchyid son especficos 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 replicacin no comprueba esta condicin y, a diferencia de las columnas IDENTITY, no hay ningn 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 hurfanas. 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 operacin de insercin desde el suscriptor generar un error porque no hay ningn 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 tambin
Conceptos
Datos jerrquicos (SQL Server) Referencia de los mtodos del tipo de datos hierarchyid

sql_variant (Transact-SQL)
SQL Server 2012 Otras versiones

Este tema an no ha recibido ninguna valoracin - 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, parmetros, 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) nvarchar(max) text image sql_variant hierarchyid Tipos definidos por el usuario

varbinary(max) xml ntext rowversion (timestamp) geography geometry datetimeoffset

sql_variant puede tener una longitud mxima de 8.016 bytes. Esto incluye la informacin y el valor de tipo base.La longitud mxima 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 adicin y la sustraccin.

Se puede asignar un valor predeterminado a sql_variant. Este tipo de datos tambin puede incluir NULL como valor subyacente, aunque estos valores NULL no dispondrn de un tipo base asociado. Adems, 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 mxima de un ndice.sta es de 900 bytes. Una tabla puede constar de cualquier nmero 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 jerarquas de tipos de datos para conversin. En las comparaciones de sql_variant, el orden de la jerarqua del tipo de datos SQL Server se agrupa en familias de tipos de datos.

Jerarqua de tipo de datos sql_variant datetime2 datetimeoffset datetime smalldatetime date time float real decimal money smallmoney

Familia de tipo de datos sql_variant Fecha y hora Fecha y hora Fecha y hora Fecha y hora Fecha y hora Fecha y hora Valor numrico aproximado Valor numrico aproximado Valor numrico exacto Valor numrico exacto Valor numrico exacto

bigint int smallint tinyint bit nvarchar nchar varchar char varbinary binary uniqueidentifier

Valor numrico exacto Valor numrico exacto Valor numrico exacto Valor numrico exacto Valor numrico exacto Unicode Unicode Unicode Unicode Binary Binary 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 estn en familias de tipos de datos diferentes, el valor cuya familia de tipo de datos ocupa una posicin superior en el grfico de jerarqua 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 estn en la misma familia de tipos de datos, el valor cuyo tipo de datos base ocupa una posicin inferior en el grfico de jerarqua se convierte implcitamente al otro tipo de datos y, a continuacin, se realiza la comparacin. 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, versin de LCID, marcas de comparacin 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 segn la intercalacin.

Convertir datos sql_variant

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

Vea tambin
Referencia
CAST 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 funcin 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 informacin que se utiliza para definir una tabla en CREATE TABLE. La declaracin 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 ms informacin acerca de la sintaxis, vea CREATE TABLE (TransactSQL), CREATE FUNCTION (Transact-SQL) y DECLARE @local_variable (Transact-SQL).

collation_definition
Es la intercalacin de la columna que consiste en una configuracin regional de Microsoft Windows y un estilo de comparacin, una configuracin regional de Windows y la notacin binaria o una intercalacin de Microsoft SQL Server. Si no se especifica collation_definition, la columna hereda la intercalacin 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 intercalacin del tipo definido por el usuario.

Observaciones generales
Se puede hacer referencia a las variables table por nombre en la clusula FROM de un lote, segn se muestra en el siguiente ejemplo: SELECT Employee_ID, Department_ID FROM @MyTableVar; Fuera de una clusula FROM, se debe hacer referencia a las variables table mediante un alias, segn se muestra en el siguiente ejemplo: SELECT EmployeeID, DepartmentID FROM @MyTableVar m JOIN Employee on (m.EmployeeID =Employee.EmployeeID AND m.DepartmentID = Employee.DepartmentID); Las variables table proporcionan las siguientes ventajas para las consultas a pequea escala que tienen planes de consulta invariables y cuando la recompilacin es un tema importante: Una variable table se comporta como una variable local. Tiene un mbito bien definido. Dicho mbito es la funcin, 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 expresin de tabla. Como excepcin, table no puede utilizarse en la siguiente instruccin: SELECT select_list INTO table_variable; Las variables table se limpian automticamente al final de la funcin, procedimiento almacenado o lote en que estn 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 actualizacin 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 estadsticas de distribucin, no desencadenarn recompilaciones. Por tanto, en muchos casos, el optimizador generar un programa de consultas basndose en que la variable table no tiene filas. Por este motivo, las variables table deben usarse con precaucin si se espera una gran cantidad de filas (ms de 100). En estos casos, las tablas Temp pueden representar una mejor solucin. 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 seleccin de ndice. Las consultas que modifican variables table no generan planes de ejecucin 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 ms informacin, 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 explcita; en estas variables table tampoco se conserva ninguna estadstica. En determinados casos, el rendimiento puede mejorar si se utilizan tablas temporales, las cuales admiten ndices y estadsticas. Para obtener ms informacin acerca de las tablas temporales, vea CREATE TABLE (Transact-SQL). Las restricciones CHECK, los valores DEFAULT y las columnas calculadas de la declaracin del tipo table no pueden llamar a funciones definidas por el usuario. No se permite la operacin de asignacin entre variables table. Las variables table no se ven afectadas por las operaciones de reversin 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 table
En el ejemplo siguiente se crea una variable table que almacena los valores especificados en la clusula OUTPUT de la instruccin UPDATE. Las dos instrucciones SELECT que le siguen devuelven los valores en @MyTableVar y los resultados de la operacin de actualizacin 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 activacin de los desencadenadores. Para obtener ms informacin, vea OUTPUT (clusula de Transact-SQL). Transact-SQL USE AdventureWorks2012; GO DECLARE @MyTableVar table( EmpID int NOT NULL, OldVacationHours int,

NewVacationHours int, ModifiedDate datetime); UPDATE TOP (10) HumanResources.Employee SET VacationHours = VacationHours * 1.25, ModifiedDate = GETDATE() OUTPUT inserted.BusinessEntityID, deleted.VacationHours, inserted.VacationHours, inserted.ModifiedDate INTO @MyTableVar; --Display the result set of the table variable. SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate FROM @MyTableVar; GO --Display the result set of the table. SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDate FROM HumanResources.Employee; GO

B.Crear una funcin alineada con valores de tabla

El siguiente ejemplo devuelve una funcin 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; GO IF OBJECT_ID (N'Sales.ufn_SalesByStore', N'IF') IS NOT NULL DROP FUNCTION Sales.ufn_SalesByStore; GO CREATE FUNCTION Sales.ufn_SalesByStore (@storeid int) RETURNS TABLE AS RETURN ( 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 ); GO Para invocar la funcin, ejecute esta consulta. Transact-SQL SELECT * FROM Sales.ufn_SalesByStore (602);

Vea tambin

Referencia
COLLATE (Transact-SQL) CREATE FUNCTION (Transact-SQL) CREATE TABLE (Transact-SQL) DECLARE @local_variable (Transact-SQL) Sugerencias de consulta (Transact-SQL)

Conceptos
Funciones definidas por el usuario Usar parmetros con valores de tabla (motor de base de datos)

rowversion (Transact-SQL)
SQL Server 2012 Otras versiones

Este tema an no ha recibido ninguna valoracin - Valorar este tema Es un tipo de datos que expone nmeros binarios nicos generados automticamente en una base de datos.rowversion suele utilizarse como mecanismo para marcar la versin de las filas de la tabla. El tamao de almacenamiento es de 8 bytes. El tipo de datos rowversion es simplemente un nmero 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 operacin de insercin o actualizacin que se lleva a cabo en una tabla que contiene una columna rowversion en la base de datos. Este contador es la versin 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 actualizacin 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 vlido, as como las claves externas que hacen referencia al valor antiguo. Si se hace referencia a la tabla en un cursor dinmico, todas las actualizaciones cambian la posicin de las filas en el cursor. Si la columna es una clave de ndice, todas las actualizaciones de la fila de datos tambin generan actualizaciones del ndice. timestamp es el sinnimo del tipo de datos rowversion y est sujeto al comportamiento de los sinnimos de tipos de datos. En las instrucciones DDL, utilice rowversion en lugar de timestamp siempre que sea posible. Para obtener ms informacin, vea Sinnimos de tipos de datos (Transact-SQL). El tipo de datos timestamp de Transact-SQL es distinto del tipo de datos timestamp definido en el estndar ISO.

Nota

La sintaxis de timestamp se ha quedado desusada. Esta caracterstica se quitar en una versin futura de Microsoft SQL Server. Evite utilizar esta caracterstica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.

En una instruccin CREATE TABLE o ALTER TABLE, no tiene que especificar ningn 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 sinnimo 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 instruccin 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 semnticamente a una columna binary(8). Una columna rowversion que acepta valores NULL equivale semnticamente a una columna varbinary(8). Puede utilizar la columna rowversion de una fila para determinar con facilidad si algn valor de la fila ha cambiado desde la ltima vez que se ley. Si se ha realizado algn cambio en la fila, el valor rowversion se actualiza. Si no se ha realizado algn 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. Tambin puede que desee conocer cuntas 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); GO A continuacin, puede utilizar las instrucciones de Transact-SQL de ejemplo siguientes para implementar el control de simultaneidad optimista en la tabla MyTest durante la actualizacin. DECLARE @t TABLE (myKey int); UPDATE MyTest SET 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. Tambin puede colocar las instrucciones de Transact-SQL de ejemplo en una transaccin. Al consultar la variable@t en el mbito de la transaccin, puede recuperar la columna myKey actualizada de la tabla sin consultar de nuevo la tabla MyTest. A continuacin 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); GO DECLARE @t TABLE (myKey int); UPDATE MyTest2 SET 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 tambin
Referencia

ALTER 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?

No

uniqueidentifier (TransactSQL)
SQL Server 2012 Otras versiones

Este tema an no ha recibido ninguna valoracin - 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 funcin NEWID. Mediante la conversin a partir de una constante de cadena con el formato xxxxxxxx-xxxxxxxx-xxxx-xxxxxxxxxxxx, donde cada x es un dgito hexadecimal en el intervalo 0-9 o a-f. Por ejemplo, 6F9619FF-8B86-D011-B42D-00C04FC964FF es un valor uniqueidentifier vlido. Con los valores uniqueidentifier se pueden utilizar operadores de comparacin. No obstante, no se implementa la ordenacin mediante la comparacin 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 aritmticos. Con el tipo de datosuniqueidentifier, se pueden utilizar todas las propiedades y restricciones de columna, excepto IDENTITY. La replicacin de mezcla y la replicacin transaccional con suscripciones de actualizacin 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 carcter para la conversin desde una expresin de caracteres y, por tanto, est sujeto a las reglas de truncamiento para la conversin a un tipo de carcter. Es decir, cuando se convierten expresiones de carcter a un tipo de datos de carcter de un tamao distinto, se truncan los valores que son demasiado grandes para el nuevo tipo de datos. Vea la seccin 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-9960E1C80E27ABA0 (1 row(s) affected)

Vea tambin
Referencia

ALTER 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)

Conceptos
Suscripciones actualizables para replicacin 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 ms elementos en el nivel superior. Tambin 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 raz (solo uno). No se admiten nodos de texto en el nivel superior. xml_schema_collection Es el nombre de una coleccin de esquemas XML. Para crear una columna o una variable xml con tipos, puede especificar opcionalmente el nombre de la coleccin de esquemas XML. Para obtener ms informacin acerca de XML con y sin tipos, vea Comparar XML con tipo y XML sin tipo.

Comentarios
La representacin almacenada de las instancias del tipo de datos xml no puede superar 2 gigabytes (GB) de tamao. Las facetas CONTENT y DOCUMENT solo se aplican a XML con tipo. Para obtener ms informacin, veaComparar XML con tipo y XML sin tipo.

Ejemplos

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

Vea tambin
Referencia

Tipos de datos (Transact-SQL)

Conceptos
Conversiones de tipos de datos (motor de base de datos)

Otros recursos
Mtodos de tipo de datos xml Referencia del lenguaje XQuery (SQL Server)

Estos son los tipos de datos que soporta el SQL de Microsoft Jet versin 4.0 Los sinnimos son palabras equivalentes al tipo de dato indicado. El tamao indica cunto ocupar una columna del tipo indicado.

Tipo de dato
BINARY

Sinnimos

Tamao

Descripcin

VARBINARY 1 byte por Se puede almacenar cualquier tipo de datos BINARY VARYING carcter en un campo de este tipo. Los datos no se BIT VARYING traducen (por ejemplo, a texto). La forma en que se introducen los datos en un campo binario indica cmo aparecern al mostrarlos. BOOLEAN LOGICAL LOGICAL1 YESNO INTEGER1 BYTE AUTOINCREMENT 1 byte Valores S y No, y campos que contienen solamente uno de dos valores.

BIT

TINYINT

1 byte

Un nmero entero entre 0 y 255.

COUNTER

Se utiliza para campos contadores cuyo valor se incrementa automticamente al crear un nuevo registro. 8 bytes Un nmero entero comprendido entre 922.337.203.685.477,5808 y 922.337.203.685.477,5807. Una valor de fecha u hora entre los aos 100 y 9999 Un nmero de identificacin nico utilizado con llamadas a procedimientos remotos. Un tipo de datos numrico exacto con valores comprendidos entre 1028 - 1 y 1028 - 1. Puede definir la precisin (1 - 28) y la escala (0 - precisin definida). La precisin y la escala predeterminadas son 18 y 0, respectivamente. Un valor de coma flotante de precisin 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. Un valor de coma flotante de precisin 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.

MONEY

CURRENCY

DATETIME

DATE TIME

8 bytes

UNIQUEIDENTIFIER GUID DECIMAL NUMERIC DEC

128 bits 17 bytes

REAL

SINGLE FLOAT4 IEEESINGLE

4 bytes

FLOAT

DOUBLE FLOAT8 IEEEDOUBLE NUMBER

8 bytes

SMALLINT

SHORT INTEGER2 LONG INT INTEGER4 LONGBINARY GENERAL OLEOBJECT LONGTEXT LONGCHAR MEMO NOTE NTEXT TEXT(n) ALPHANUMERIC CHARACTER STRING VARCHAR CHARACTER VARYING NCHAR NATIONAL CHARACTER NATIONAL CHAR NATIONAL CHARACTER VARYING NATIONAL CHAR VARYING

2 bytes

Un entero corto entre 32.768 y 32.767.

INTEGER

4 bytes

Un entero largo entre 2.147.483.648 y 2.147.483.647.

IMAGE

Lo que se Desde cero hasta un mximo de 2.14 requiera gigabytes. Se utiliza para objetos OLE. 2 bytes Desde cero hasta un mximo de 2.14 por gigabytes. carcter. (Consulte las notas). 2 bytes Desde cero a 255 caracteres. por carcter. (Consulte las notas).

TEXT

CHAR

Notas: Un campo LONGTEXT se almacena siempre en el formato de representacin 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 producirn tipos de datos coherentes con Microsoft SQL Server. Un campo CHAR se almacena siempre en el formato de representacin 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 mayora de las aplicaciones de Microsoft Jet, a la vez que se habilita el tipo de datos TEXT (sin especificacin de longitud) para la alineacin con Microsoft

SQL Server. Los caracteres de los campos definidos como TEXT (tambin conocidos como MEMO) o CHAR (tambin conocidos como TEXT(n) con una longitud especfica) se almacenan en el formato de representacin Unicode. Los caracteres Unicode requieren siempre dos bytes para el almacenamiento de cada carcter. Para las bases de datos de Microsoft Jet ya existentes que contengan principalmente datos de tipo carcter, esto puede significar que el tamao del archivo de base de datos sea casi el doble cuando se convierta al formato Microsoft Jet 4.0. Sin embargo, la representacin Unicode de muchos juegos de caracteres, antes denominados juegos de caracteres de un solo byte (SBCS), puede comprimirse fcilmente a caracteres de un solo byte. Si define una columna CHAR con el atributo COMPRESSION, los datos se comprimirn automticamente a medida que se almacenen y se descomprimirn cuando se recuperen de la columna.

Los caracteres Unicode y su compresin.


En ACCESS 2000 se utiliza el formato de representacin de caracteres Unicode, los caracteres Unicode requieren siempre dos bytes para cada carcter lo que permite una gama ms amplia de caracteres. Para las bases de datos de Microsoft Jet ya existentes que contengan principalmente datos de tipo carcter, esto puede significar que el tamao del archivo de base de datos sea casi el doble cuando se convierta al formato Microsoft Jet versin 4.0. Sin embargo, la representacin Unicode de muchos juegos de caracteres, antes denominados juegos de caracteres de un solo byte (SBCS), puede comprimirse fcilmente a caracteres de un solo byte. Si se define una columna CHARACTER con el atributo WITH COMPRESSION (propiedad Compresin Unicode), los datos se comprimirn automticamente cuando se almacenen y se descomprimirn cuando se recuperen de la columna. Las columnas MEMO tambin pueden ser definidas de modo que almacenen datos en formato comprimido. No obstante, existe una restriccin. Slo se comprimirn las instancias de columnas MEMO que, tras la compresin, ocupen 4.096 bytes o menos. El resto de instancias de columnas MEMO quedarn 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 informacin que puede guardar un campo: caracteres, nmeros, etc. Estos son algunos tipos de datos bsicos 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 mximo de caracteres entre parntesis. Puede guardar hasta 8000 caracteres. Por ejemplo, para almacenar cadenas de hasta 30 caracteres, definimos un campo de tipo varchar(30), es decir, entre parntesis, 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 situacin 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 numricos enteros, de -2000000000 a 2000000000 aprox. Definimos campos de este tipo cuando queremos representar, por ejemplo, cantidades. float: se usa para almacenar valores numricos 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 nmeros enteros, el tipo "float" sera una mala eleccin; si vamos a guardar precios, el tipo "float" es ms adecuado, no as "integer" que no tiene decimales. Otro ejemplo, si en un campo vamos a guardar un nmero telefnico o un nmero de documento, usamos "varchar", no "integer" porque si bien son dgitos, con ellos no realizamos operaciones matemticas.

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

Tipos de datos de base de datos Microsoft SQL


Escrito por Colette Larson | Traducido por Beatriz Snchez

Escoger el tipo de datos correcto para cada variable es una consideracin importante para optimizar el rendimiento a medida que aumenta el tamao 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 categora de la informacin 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 ensean a la base de datos cmo se debe almacenar y usar cada tipo de datos.

Otras personas estn leyendo

Cmo ejecutar una consulta de base de datos SQL Cmo ajustar en T-SQL

Datos de cadena
Las 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 tamao conocido de menos de 8 KB, mientras que Varchar es apropiado para las entradas con un nmero variable de caracteres menor de 8 KB y con texto que contiene las entradas de ms de 8 KB. Las

cadenas binarias constan en nmeros 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 estn 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 hora


Los datos de fecha y hora tienen cualquier combinacin de fecha vlida 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 numricos
Los datos numricos constan de los nmeros 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 nmeros enteros, tanto positivos como negativos. Smallint, que requiere 2 bytes de almacenamiento por entrada, es el tipo de datos ms comnmente 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 nmeros que van de 0 a 255. Cuando almacenas cualquier nmero de fraccin, el tipo de datos decimal guarda los datos hasta el dgito menos significativo.

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

Datos especiales
Los 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 especficos 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 discomemoria 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 numricos.


SQL Server dispone de varios tipos de datos nmericos. Cuanto mayor sea el nmero que puedan almacenar mayor ser en consecuencia el espacio utilizado para almacenarlo. Como regla general se recomienda usar el tipo de dato mnimo posible. Todos los dato numricos 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 nmericos decimales sin redondear. Donde p es la precision (nmero total del dgitos) y s la escala (nmero de valores decimales) Float. Una columna de datos float puede almacenar el rango de valores -1,79x-10308 a 1,79x10308, , si la definimos con el valor mxmo de precisin. La precisin puede variar entre 1 y 53. Real. Sinnimo de float(24). Puede almacenar el rango de valores -3,4x-1038 a 3,4x-1038, Money. Almacena valores nmericos monetarios de -263 a 263-1, con una precisin de hasta diexz milesimas de la unidad monetaria. SmallMoney. Almacena valores nmericos monetarios de -214.748,3647 a 214.748,3647, con una precisin de hasta diez milesimas de la unidad monetaria. Todos los tipos de datos enteros pueden marcarse con la propiedad identity para hacerlos autonumricos.

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 = 1 print @bit set @tinyint = 255 print @tinyint set @smallint = 32767 print @smallint set @int = 642325 print @int set @decimal = 56565.234 -- Punto como separador decimal print @decimal set @money = 12.34 print @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 2 31-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 insercin - actualizacin. El tipo timestamp se actualiza automticamente 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 mxima de 8000 bytes. Varbinary. Se utiliza para almacenar datos binarios de longitud variable, con una longitud mxima 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 funcinNEWID().

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 creacin de tipos de datos personalizados, a trevs de la instruccin CREATE TYPE. Personalmente, desaconsejo el uso de tipos de datos personalizados.

CREATE TYPE MD5 FROM CHAR(32) NULL GO DECLARE @miMD5 MD5 set @miMD5 = '0000000000000000000000000000000A' print @miMD5

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

Tipos de Datos MSSQL Server


FLY D B A :: MSSQL Server :: Programacin
Pgina 1 de 1. Compartir Ms!

Tipos de Datos MSSQL Server


xdiablo el Jue Sep 11, 2008 5:09 pm

Como sabrn, 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 Alfanumricos Varchar(n) Datos de caracteres no Unicode de longitud variable. n puede ser un valor entre 1 y 8.000. Tamao: el nmero de caracteres especificado + 2 bytes. Los datos especificados pueden tener una longitud de 0 caracteres.

Nvarchar(n) Datos de carcter Unicode de longitud variable. n puede ser un valor comprendido entre 1 y 4.000. Tamao: dos veces el nmero 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. Tamao: es n bytes.

Nchar(n) Datos de carcter Unicode de longitud fija, con n caracteres. n debe estar comprendido entre 1 y 4.000. Tamao: dos veces n bytes.

Numricos Exactos Numeric(p,s) Decimal(p,s) Nmeros de precisin y escala fijas. numeric es funcionalmente equivalente a decimal. p (precisin) El nmero total mximo de dgitos que se puede almacenar, tanto a la izquierda como a la derecha del separador decimal. La precisin debe ser un valor comprendido entre 1 y la precisin mxima de 38. La precisin predeterminada es 18. s (escala) El nmero mximo de dgitos decimales que se puede almacenar a la derecha del separador decimal. La escala debe ser un valor comprendido entre 0 y p. Slo es posible especificar la escala si se ha especificado la precisin. La escala predeterminada es 0; por lo tanto, 0 <= s <= p. Los tamaos de almacenamiento mximo varan, segn la precisin.

Int, Bigint, Smallint y Tinyint Tipos de datos numricos 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). Tamao: 8 bytes Int De -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647). Tamao: 4 bytes

Smallint De -2^15 (-32.768) a 2^15-1 (32.767). Tamao: 2 bytes Tinyint De 0 a 255. Tamao: 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 Tamao: 8 bytes Smallmoney De - 214.748,3648 a 214.748,3647. Tamao: 4 bytes

Bit Tipo de datos entero que puede aceptar los valores 1, 0 o NULL. Tamao: 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.

Numricos Aproximados Float - Real Tipos de datos numricos y aproximados que se utilizan con datos numricos 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. Tamao: n de 1-24, 7 dgitos 4 bytes. n 25-53, 15 dgitos 8 bytes Real

De - 3,40E + 38 a -1,18E - 38, 0 y de 1,18E - 38 a 3,40E + 38. Tamao: 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 Precisin Tamao (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 da 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. Tamao: n bytes.

Varbinary(n) Datos binarios de longitud variable, donde n es un valor que oscila entre 1 y 8.000. Tamao: la longitud real de los datos especificados + 2 bytes. Los datos especificados pueden tener una longitud de 0 bytes.

xdiablo
Admin

Cantidad de envos: 12 Edad: 29 Fecha de inscripcin: 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 tamao que ocupan.

Definicin de Microsoft SQL Server


Microsoft SQL Server es un sistema de gestin de bases de datos relacionales (SGBD) basado en el lenguaje Transact-SQL, y especficamente en Sybase IQ. Este motor de base de datos admite multitud de usuarios conectados a la base de datos de forma simultnea y concurrente. Algunas de las caractersticas de Microsoft SQL Server:

Soporte de transacciones. Escalabilidad, estabilidad y seguridad. Soporta procedimientos almacenados. Incluye tambin un potente entorno grfico de administracin, que permite el uso de comandos DDL y DML grficamente. Permite trabajar en modo cliente-servidor, donde la informacin y datos se alojan en el servidor y las terminales o clientes de la red slo acceden a la informacin. Permite administrar informacin de otros servidores de datos.

Este sistema de gestin de bases incluye una versin reducida, llamada MSDE con el mismo motor de base de datos pero orientado a proyectos ms pequeos, que en su versin 2005 pasa a ser el SQL Express Edition, que se distribuye en forma gratuita.

Tipos de datos de Microsoft SQL Server


A continuacin 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 bigint int smallint tinyint Numricos exactos bit Intervalo De -263 (-9.223.372.036.854.775.808) a 263 - 1 (9.223.372.036.854.775.807) De -231 (-2.147.483.648) a 231 - 1 (2.147.483.647) De -215 (-32.768) a 215 - 1 (32.767) De 0 a 255 Tipo de datos entero que puede aceptar los valores 1, 0 NULL Almacenamiento 8 bytes 4 bytes 2 bytes 1 byte 2 bytes

decimal, numeric, decimal (p, s)

p (precisin): el nmero total mximo de dgitos decimales que se puede almacenar, tanto a la izquierda como a la derecha del separador decimal. La precisin debe ser un valor comprendido entre 1 y la precisin mxima de 38. La precisin predeterminada es 18.

Precisin 1 - 9: 5 s (escala): el nmero mximo de dgitos decimales que se puede bytes almacenar a la derecha del separador decimal. La escala debe ser un valor comprendido entre 0 y p. Slo es posible especificar la escala si se ha especificado la precisin. La escala predeterminada es 0.

Con precisin mxima 1038 +1 y 1038 - 1

money smallmoney float real datetime Fecha y hora smalldatetime char (n)

Tipos de datos que representan valores monetarios o de moneda: de 922.337.203.685,4775808 a 922.337.203.685,4775807 De - 214,7483648 a 214,7483647 De - 1,79E+308 a -2,23E-308, 0 y de 2,23E-308 a 1,79E+308 De - 3,40E + 38 a -1,18E - 38, 0 y de 1,18E - 38 a 3,40E + 38 Del 1 de enero de 1753 hasta el 31 de diciembre de 9999 Del 1 de enero de 1900 hasta el 6 de junio de 2079

8 bytes 4 bytes Depende del valor de n 4 Bytes

Numricos aproximados

Caracteres no Unicode de longitud fija, con una longitud de n bytes. ndebe ser un n bytes valor entre 1 y 8.000 Caracteres no Unicode de longitud variable. n indica que el tamao de almacenamiento mximo es de 231 - 1 bytes En desuso, sustituido por varchar. n bytes (aprox.)

Cadenas de caracteres

varchar (n)

text Datos no Unicode de longitud variable con una longitud mxima de 2 (2.147.483.647) caracteres nchar (n)
31

-1

max bytes (aprox.)

Datos de carcter Unicode de longitud fija, con n caracteres. n debe estar comprendido entre 1 y 4.000 Datos de carcter Unicode de longitud variable. n indica que el tamao mximo de almacenamiento es 231 - 1 bytes En desuso, sustituido por nvarchar.

2 * n bytes 2 * n bytes + 2 bytes

Cadenas de caracteres unicode

nvarchar (n)

ntext (n) Datos Unicode de longitud variable con una longitud mxima de 230 - 1 (1.073.741.823) caracteres 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 Datos binarios de longitud variable. n indica que el tamao de almacenamiento mximo es de 231 - 1 bytes En desuso, sustituido por varbinary. Datos binarios de longitud variable desde 0 hasta 231 - 1 (2.147.483.647) bytes cursor Tipo de datos para las variables o para los parmetros de resultado de los procedimientos almacenados que contiene una referencia a un cursor. Las variables creadas con el tipo de datos cursor aceptan NULL

2 * n bytes

n bytes

Cadenas binarias

varbinary (n)

n bytes

image

timestamp Otros tipos de datos

Tipo de datos que expone nmeros binarios nicos generados automticamente en una base de datos. El tipo de datos timestamp es simplemente un nmero que 8 bytes se incrementa y no conserva una fecha o una hora Tipo de datos que almacena valores de varios tipos de datos aceptados en SQL Server, excepto text, ntext, image, timestamp y sql_variant Es un GUID (Globally Unique Identifier, Identificador nico Global) 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 16 bytes

sql_variant uniqueidentifier

table

resultados de una funcin 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

You might also like