Etiquetas

SQL Server (Tipo de datos)

 



En SQL Server, los tipos de columnas se determinan por los tipos de datos disponibles. Estos tipos se clasifican en varias categorías según el tipo de información que almacenan. A continuación, se presenta una lista organizada por categoría:

1. Tipos de datos numéricos

Enteros

  • TINYINT: Enteros de 0 a 255 (1 byte).
  • SMALLINT: Enteros de -32,768 a 32,767 (2 bytes).
  • INT: Enteros de -2,147,483,648 a 2,147,483,647 (4 bytes).
  • BIGINT: Enteros de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (8 bytes).

Decimales y flotantes

  • DECIMAL(p, s) o NUMERIC(p, s): Números exactos con precisión y escala definidas.
    • p: Precisión total (máx. 38 dígitos).
    • s: Escala (dígitos a la derecha del punto decimal).
  • FLOAT(n): Números aproximados basados en precisión binaria.
    • n: Precisión opcional (1-53).
  • REAL: Números aproximados (precisión de 24 bits).

Monetarios

  • MONEY: Valores monetarios de -922,337,203,685,477.5808 a 922,337,203,685,477.5807 (8 bytes).
  • SMALLMONEY: Valores monetarios de -214,748.3648 a 214,748.3647 (4 bytes).

2. Tipos de datos de texto y cadenas

Texto fijo

  • CHAR(n): Cadena de texto de longitud fija (máx. 8,000 caracteres).

Texto variable

  • VARCHAR(n): Cadena de texto de longitud variable (máx. 8,000 caracteres).
  • VARCHAR(MAX): Cadena de texto de longitud variable (máx. 2^31-1 caracteres).

Texto Unicode

  • NCHAR(n): Cadena Unicode de longitud fija (máx. 4,000 caracteres).
  • NVARCHAR(n): Cadena Unicode de longitud variable (máx. 4,000 caracteres).
  • NVARCHAR(MAX): Cadena Unicode de longitud variable (máx. 2^31-1 caracteres).

Texto de gran tamaño (obsoleto, solo por compatibilidad)

  • TEXT: Texto de longitud variable (máx. 2^31-1 caracteres). [Desaconsejado, usar VARCHAR(MAX)].

3. Tipos de datos de fecha y hora

  • DATE: Solo fecha (formato YYYY-MM-DD, desde 0001-01-01 hasta 9999-12-31).
  • TIME: Solo hora (formato hh:mm:ss[.nnnnnnn]).
  • DATETIME: Fecha y hora combinadas (desde 1753-01-01 hasta 9999-12-31, precisión de 3.33 ms).
  • SMALLDATETIME: Fecha y hora combinadas (desde 1900-01-01 hasta 2079-06-06, precisión de 1 minuto).
  • DATETIME2: Fecha y hora con precisión ajustable (desde 0001-01-01 hasta 9999-12-31, precisión hasta 100 ns).
  • DATETIMEOFFSET: Fecha y hora con información de zona horaria.

4. Tipos de datos binarios

  • BINARY(n): Datos binarios de longitud fija (máx. 8,000 bytes).
  • VARBINARY(n): Datos binarios de longitud variable (máx. 8,000 bytes).
  • VARBINARY(MAX): Datos binarios de longitud variable (máx. 2^31-1 bytes).
  • IMAGE: Datos binarios de gran tamaño (obsoleto, usar VARBINARY(MAX)).

5. Tipos de datos de identificación y únicos

  • UNIQUEIDENTIFIER: Almacena un GUID (Global Unique Identifier).
    SELECT NEWID(); -- Genera un GUID único

6. Tipos de datos espaciales

  • GEOGRAPHY: Representa datos geográficos (coordenadas de latitud/longitud en formato de sistema global).
  • GEOMETRY: Representa datos geométricos (puntos, líneas, polígonos en un plano cartesiano).

7. Tipos de datos XML y JSON

  • XML: Almacena datos en formato XML.
  • JSON: Aunque no es un tipo de datos nativo, se pueden manipular datos JSON con funciones específicas en SQL Server.

8. Tipos de datos jerárquicos

  • HIERARCHYID: Representa datos jerárquicos, como estructuras de árbol.

9. Tipos de datos para almacenamiento temporal

  • ROWVERSION o TIMESTAMP: Número binario único que cambia cada vez que se actualiza una fila (no es un tipo de fecha/hora).

10. Tipos de datos especializados

  • CURSOR: Referencia a un cursor en la base de datos (para manejar conjuntos de resultados fila por fila).
  • TABLE: Tipo especial usado para definir variables de tabla en T-SQL.

Conversión explícita

En SQL Server, las conversiones de tipos de datos se dividen en dos categorías principales:

  1. Conversión implícita: SQL Server realiza la conversión automáticamente cuando no hay riesgo de pérdida de datos.
  2. Conversión explícita: El desarrollador especifica explícitamente la conversión utilizando funciones como CAST o CONVERT.

A continuación, se enumeran todas las conversiones de tipos de datos que se pueden realizar en SQL Server, organizadas por categoría:

1. Conversión explícita

a. Usando la función CAST

La función CAST convierte un valor de un tipo de datos a otro de manera estándar.

Ejemplo:

SELECT CAST(123 AS VARCHAR(10)) AS convertido;

b. Usando la función CONVERT

La función CONVERT es específica de SQL Server y permite conversiones con formatos adicionales (especialmente para fechas).

Ejemplo:

SELECT CONVERT(VARCHAR, GETDATE(), 101) AS fecha_formateada;

2. Tipos de conversiones soportadas

a. De numéricos a texto

  • Convertir de tipos numéricos (INT, FLOAT, DECIMAL, etc.) a texto (CHAR, VARCHAR, NVARCHAR):
    SELECT CAST(12345 AS VARCHAR(10)) AS texto;

b. De texto a numéricos

  • Convertir de texto (CHAR, VARCHAR, NVARCHAR) a tipos numéricos:
    SELECT CAST('12345' AS INT) AS numero;

c. De fecha/hora a texto

  • Convertir de tipos de fecha (DATE, DATETIME, DATETIME2, etc.) a texto:
    SELECT CONVERT(VARCHAR, GETDATE(), 103) AS fecha_texto; -- Formato DD/MM/YYYY

d. De texto a fecha/hora

  • Convertir de texto (VARCHAR, NVARCHAR) a tipos de fecha:
    SELECT CAST('2025-01-07' AS DATE) AS fecha;

e. De binarios a texto

  • Convertir datos binarios (BINARY, VARBINARY) a texto (VARCHAR, NVARCHAR):
    SELECT CAST(0x48656C6C6F AS VARCHAR(MAX)) AS texto_binario;

f. De texto a binarios

  • Convertir texto (VARCHAR, NVARCHAR) a datos binarios:
    SELECT CAST('Hola' AS VARBINARY(MAX)) AS binario;

g. De GUID a texto

  • Convertir identificadores únicos (UNIQUEIDENTIFIER) a texto:
    SELECT CAST(NEWID() AS VARCHAR(36)) AS guid_texto;

h. De texto a GUID

  • Convertir texto (VARCHAR) a identificadores únicos:
    SELECT CAST('D3967E4E-97B2-4E63-A457-11DD9AA7D6B4' AS UNIQUEIDENTIFIER) AS guid;

i. De numéricos a fecha/hora

  • Convertir números a fechas/hora (como marca de tiempo en formato flotante):
    SELECT CAST(43831.5 AS DATETIME) AS fecha_hora; -- Días desde 1900-01-01

j. De booleanos simulados

SQL Server no tiene un tipo BOOLEAN nativo, pero puedes convertir valores enteros (0, 1) en texto o viceversa:

  • De entero a texto:
    SELECT CASE WHEN 1 = 1 THEN 'True' ELSE 'False' END AS booleano_texto;

3. Formatos de conversión con CONVERT

La función CONVERT permite formatear valores durante la conversión, especialmente para fechas. Aquí tienes algunos códigos de formato comunes:

CódigoFormato de fechaEjemplo
101MM/DD/YYYY01/07/2025
103DD/MM/YYYY07/01/2025
112YYYYMMDD20250107
120YYYY-MM-DD HH:MI:SS2025-01-07 12:00:00
126ISO8601 (con T)2025-01-07T12:00:00

4. Consideraciones importantes

a. Riesgos de pérdida de datos

  • Convertir de texto a un tipo numérico o de fecha puede fallar si el formato no es compatible:
    SELECT CAST('abc' AS INT); -- Error

b. Truncamiento

  • Al convertir un valor largo a un tipo más corto, los datos pueden truncarse:
    SELECT CAST('Texto largo' AS VARCHAR(5)) AS truncado; -- Resultado: 'Texto'

c. Precisión

  • Al convertir entre tipos numéricos, verifica la precisión para evitar errores:

    SELECT CAST(123.456 AS INT) AS truncado; -- Resultado: 123