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.


Autor: Antonio Lopez Atienza


Posted in SQL Server | No Comments »

Leave a Comment

 

RSS
MCC D5E