numero extraer espacios encontrar ejemplos digitos coincidencias charindex caracteres caracter cadena buscar blanco sql sql-server non-alphanumeric

extraer - Consulta de SQL Server 2008 para encontrar filas que contengan caracteres no alfanuméricos en una columna



patindex sql (3)

Hace unas semanas me preguntaron esto mismo, mientras que sé exactamente cómo hacerlo con un SP o UDF, pero me preguntaba si habría una forma rápida y fácil de hacerlo sin estos métodos. Supongo que existe y simplemente no puedo encontrarlo.

Un punto que debo hacer es que aunque sabemos qué caracteres están permitidos (az, AZ, 0-9) no queremos especificar qué no está permitido (# @! $ Etc ...). Además, queremos tirar de las filas que tienen los caracteres ilegales para que puedan ser listados por el usuario para corregirlas (ya que no tenemos control sobre el proceso de entrada, no podemos hacer nada en ese momento).

He revisado SO y Google anteriormente, pero no pude encontrar nada que hiciera lo que quería. He visto muchos ejemplos que pueden decirle si contiene caracteres alfanuméricos o no, pero algo que puede extraer un apóstrofe en una oración que no he encontrado en forma de consulta.

Tenga en cuenta también que los valores pueden ser null o '''' (vacíos) en esta columna varchar .


¿Esto no lo hará?

SELECT * FROM TABLE WHERE COLUMN_NAME LIKE ''%[^a-zA-Z0-9]%''

Preparar

use tempdb create table mytable ( mycol varchar(40) NULL) insert into mytable VALUES (''abcd'') insert into mytable VALUES (''ABCD'') insert into mytable VALUES (''1234'') insert into mytable VALUES (''efg%^&hji'') insert into mytable VALUES (NULL) insert into mytable VALUES ('''') insert into mytable VALUES (''apostrophe '''' in a sentence'') SELECT * FROM mytable WHERE mycol LIKE ''%[^a-zA-Z0-9]%'' drop table mytable

Resultados

mycol ---------------------------------------- efg%^&hji apostrophe '' in a sentence



He encontrado this página con una solución bastante ordenada. Lo que lo hace genial es que obtienes una indicación de qué es el personaje y dónde está. Luego, ofrece una forma súper simple de solucionarlo (que puede combinarse e integrarse en un código de controlador para ampliar su aplicación).

DECLARE @tablename VARCHAR(1000) =''Schema.Table'' DECLARE @columnname VARCHAR(100)=''ColumnName'' DECLARE @counter INT = 0 DECLARE @sql VARCHAR(MAX) WHILE @counter <=255 BEGIN SET @sql= ''SELECT TOP 10 ''+@columnname+'',''+CAST(@counter AS VARCHAR(3))+'' as CharacterSet, CHARINDEX(CHAR(''+CAST(@counter AS VARCHAR(3))+''),''+@columnname+'') as LocationOfChar FROM ''+@tablename+'' WHERE CHARINDEX(CHAR(''+CAST(@counter AS VARCHAR(3))+''),''+@columnname+'') <> 0'' PRINT (@sql) EXEC (@sql) SET @counter = @counter + 1 END

y entonces...

UPDATE Schema.Table SET ColumnName= REPLACE(Columnname,CHAR(13),'''')

Crédito a Ayman El-Ghazali.