sql-server - por - if campo vacio sql
¿Cómo convertir espacios vacíos en valores nulos usando SQL Server? (7)
Tengo una tabla y las columnas en esta tabla contienen espacios vacíos para algunos registros. Ahora necesito mover los datos a otra tabla y reemplazar los espacios vacíos con un valor NULL
.
Intenté usar:
REPLACE(ltrim(rtrim(col1)),'' '',NULL)
pero no funciona. Convertirá todos los valores de col1
en NULL
. Solo quiero convertir a NULL
aquellos valores que tienen espacios vacíos.
Tal vez algo como esto?
UPDATE [MyTable]
SET [SomeField] = NULL
WHERE [SomeField] is not NULL
AND LEN(LTRIM(RTRIM([SomeField]))) = 0
Una declaración de caso debería ser la solución al seleccionar de su tabla fuente:
CASE
WHEN col1 = '' '' THEN NULL
ELSE col1
END col1
Además, una cosa a tener en cuenta es que su LTRIM y RTRIM reducen el valor de un espacio ('''') a espacio en blanco (''''). Si necesita eliminar el espacio en blanco, la declaración del caso debe modificarse de manera adecuada:
CASE
WHEN LTRIM(RTRIM(col1)) = '''' THEN NULL
ELSE LTRIM(RTRIM(col1))
END col1
aquí hay un regex para ti.
update table
set col1=null
where col1 not like ''%[a-z,0-9]%''
esencialmente encuentra cualquier columna que no tenga letras o números en ellos y lo establece en nulo. podría tener que actualizar si tiene columnas con solo caracteres especiales.
¿Has intentado esto?
UPDATE table
SET col1 = NULL
WHERE col1 = ''''
Como señalan los comentaristas, no tiene que hacer ltrim()
o rtrim()
, y las columnas NULL
no coincidirán con ''''
.
SQL Server ignora los espacios en blanco al comparar cadenas, por lo que '''' = ''''. Solo usa la siguiente consulta para tu actualización
UPDATE table
SET col1 = NULL
WHERE col1 = ''''
Los valores NULL en su tabla se mantendrán NULL, y col1s con cualquier número en los caracteres solo espacio se cambiarán a NULL.
Si desea hacerlo durante su copia de una tabla a otra, use esto:
INSERT INTO newtable ( col1, othercolumn )
SELECT
NULLIF(col1, ''''),
othercolumn
FROM table
NULLIF
un problema similar usando la función NULLIF
:
UPDATE table
SET col1 = NULLIF(col1, '''')
NULLIF devuelve la primera expresión si las dos expresiones no son iguales. Si las expresiones son iguales, NULLIF devuelve un valor nulo del tipo de la primera expresión.
Este código genera algunos SQL que pueden lograr esto en cada tabla y columna en la base de datos:
SELECT
''UPDATE [''+T.TABLE_SCHEMA+''].['' + T.TABLE_NAME + ''] SET ['' + COLUMN_NAME + ''] = NULL
WHERE ['' + COLUMN_NAME + ''] = ''''''''''
FROM
INFORMATION_SCHEMA.columns C
INNER JOIN
INFORMATION_SCHEMA.TABLES T ON C.TABLE_NAME=T.TABLE_NAME AND C.TABLE_SCHEMA=T.TABLE_SCHEMA
WHERE
DATA_TYPE IN (''char'',''nchar'',''varchar'',''nvarchar'')
AND C.IS_NULLABLE=''YES''
AND T.TABLE_TYPE=''BASE TABLE''