SQL Server TSQL – Comprobar si se puede convertir de texto a numero una columna
Written by lopezatienza on 09/05/2014 – 12:26 -Buenas a tod@s.
Me he encontrado con la necesidad de cambiar el tipo de datos de NVARCHAR a FLOAT en una tabla y me he encontrado con que hay registros tienen valores que no se pueden convertir de tipo de datos NVARCHAR a FLOAT.
La cosa es que, antes de cambiar el tipo de datos necesito hacer un UPDATE de esta columna a un valor numérico para que me permita hacer el cambio, pero para esto necesito cambiar únicamente los registros a los que le ocurra esto, por lo que buscando por la www he encontrado la siguiente forma:
SELECT
ISNUMERIC(MyCOl + 'e0') --decimal check,
ISNUMERIC(MyCOl + '.0e0') --integer check
Así se mostrarían estos registros:
SELECT
ID, VALUE,
CAST(
CASE WHEN ISNUMERIC(VALUE + 'e0') = 1 THEN VALUE ELSE NULL END
AS decimal(38, 10)
) AS ConvertedVALUE
FROM
Mytable
Una posible solución es actualizarlos a 0 los registros que sean tipo texto, para así cuando tratemos de hacerle el ALTER TABLE no de un error de conversión de datos:
UPDATE Mytable SET Col1 = 0
WHERE ID IN
(
SELECT
ID
FROM
MyTable
WHERE ISNUMERIC(Col1 + 'e0') <> 1 and Col1 is not null)
Espero que os sirva de ayuda.
Un saludo.
Posted in SQL Server | No Comments »