parent nodes: SQLapuntes

Conversion de variables

Para poder imprimir el contenido de variables que no sean cadenas hay que convertirlas antes en cadenas

CAST

DECLARE @i  INT
SET @i = 10

PRINT CAST( @i AS VARCHAR ) 

CONVERT

Es una función que nos permite, entre otras cosas, pasar una fecha a texto con un formato adecuado.
CONVERT ( data_type [ ( length ) ] , expression [ , style ] )
Los formatos para España y los números de estilo asociados son:
FORMATO Año 2 dígitos Año 4 dígitos Ejemplos
Italian 5 105 dd-mm-aa y dd-mm-aaaa
British/French 8 108 dd/mm/aa y dd/mm/aaaa
DECLARE @FECHA        DATETIME 
DECLARE @FECHA_CORTA  VARCHAR(8)  -- dd/mm/aa
DECLARE @FECHA_LARGA  VARCHAR(10) -- dd/mm/aaaa

SET @FECHA	= '4/05/98'

SET @FECHA_CORTA = CONVERT(VARCHAR(8),  @FECHA,   3)
SET @FECHA_LARGA = CONVERT(VARCHAR(10), @FECHA, 103)

PRINT 'Hoy es ' + @FECHA_CORTA + ' y también ' + @FECHA_LARGA

Ordenar fechas convertidas
Al ordenar fechas convertidas de esta forma lo hará mal pues ordenará de forma de varchar, es decir primero los ceros, luego los unos, etc por el primer carácter, se soluciona ordenando por la conversión: CONVERT(DATETIME, @FECHA, 103)

Por lo tanto en el SELECT hay que hacer la conversión en formato VARCHAR, en el ORDER BY hay que ponerlo en formato DATETIME.

Por ejemplo: Otro ejemplo real (para sacar la información de cargas dinámicas de proveedores):

Convertir números en formato USA a números en formato ES

Es útil para exportar y después importar en excel. No es necesario para usar en código fuente de cualquier otro lenguaje.

SQL deja los números con separador decimal USA '.' (punto), al importar en excel no lo trata como número sino como texto.

FORMAT(valor_a_convertir, Formato, local)

Se puede usar para fechas y para números.

El local de España es 'es-es'
El formato es mejor dejar 'G' (generic) ya que los demás ponen punto de separador de miles (y el excel no le gusta ese punto) o bien punto+divisa, ambos convierten al número en texto, así que mejor dejar "G" y que luego el excel quite los decimales sobrantes de forma automática.

SELECT FORMAT(1234.1234560000, 'N', 'ES-ES') -- 1.234,12 Mal: separador de miles. Mal: redondea a 2 decimales
SELECT FORMAT(1234.1234560000, 'G', 'ES-ES') -- 1234,1234560000 Bien la ristra de ceros se quita automáticamente en el excel
SELECT FORMAT(1234.1234560000, 'C', 'ES-ES') -- 1.234,12 € Mal: separador de miles, divisa y redondea a 2.