una ultimos quitar primer primary primaria para modificar llave foranea eliminar crear convertir columna codigo clave caracteres caracter sql sql-server tsql replace punctuation

ultimos - modificar clave primaria sql server



SQL Server: ¿cómo se elimina la puntuación de un campo? (7)

Estoy proponiendo 2 soluciones

Solución 1: hacer una tabla de ruido y reemplazar los ruidos con espacios en blanco

p.ej

DECLARE @String VARCHAR(MAX) DECLARE @Noise TABLE(Noise VARCHAR(100),ReplaceChars VARCHAR(10)) SET @String = ''hello! how * > are % u (: . I am ok :). Oh nice!'' INSERT INTO @Noise(Noise,ReplaceChars) SELECT ''!'',SPACE(1) UNION ALL SELECT ''@'',SPACE(1) UNION ALL SELECT ''#'',SPACE(1) UNION ALL SELECT ''$'',SPACE(1) UNION ALL SELECT ''%'',SPACE(1) UNION ALL SELECT ''^'',SPACE(1) UNION ALL SELECT ''&'',SPACE(1) UNION ALL SELECT ''*'',SPACE(1) UNION ALL SELECT ''('',SPACE(1) UNION ALL SELECT '')'',SPACE(1) UNION ALL SELECT ''{'',SPACE(1) UNION ALL SELECT ''}'',SPACE(1) UNION ALL SELECT ''<'',SPACE(1) UNION ALL SELECT ''>'',SPACE(1) UNION ALL SELECT '':'',SPACE(1) SELECT @String = REPLACE(@String, Noise, ReplaceChars) FROM @Noise SELECT @String Data

Solución 2: con una tabla numérica

DECLARE @String VARCHAR(MAX) SET @String = ''hello! & how * > are % u (: . I am ok :). Oh nice!'' ;with numbercte as ( select 1 as rn union all select rn+1 from numbercte where rn<LEN(@String) ) select REPLACE(FilteredData,''&#x20;'',SPACE(1)) Data from (select SUBSTRING(@String,rn,1) from numbercte where SUBSTRING(@String,rn,1) not in(''!'',''*'',''>'',''<'',''%'',''('','')'','':'',''!'',''&'',''@'',''#'',''$'') for xml path(''''))X(FilteredData)

Salida (ambos casos)

Datos

hello how are u . I am ok . Oh nice

Nota: acabo de poner algunos de los ruidos. Es posible que necesite poner los ruidos que necesita.

Espero que esto ayude

¿Alguien sabe una buena manera de eliminar la puntuación de un campo en SQL Server?

estoy pensando

UPDATE tblMyTable SET FieldName = REPLACE(REPLACE(REPLACE(FieldName,'','',''''),''.'',''''),'''''''' ,'''')

pero parece un poco tedioso cuando intento eliminar una gran cantidad de caracteres diferentes, por ejemplo:! @ # $% ^ & * () <>: "

Gracias por adelantado


Idealmente, haría esto en un lenguaje de aplicación como C # + LINQ como se mencionó anteriormente.

Sin embargo, si quisiera hacerlo puramente en T-SQL, una forma de hacer las cosas más ordenadas sería crear primero una tabla que retuviera toda la puntuación que desea eliminar.

CREATE TABLE Punctuation ( Symbol VARCHAR(1) NOT NULL ) INSERT INTO Punctuation (Symbol) VALUES('''''''') INSERT INTO Punctuation (Symbol) VALUES(''-'') INSERT INTO Punctuation (Symbol) VALUES(''.'')

A continuación, puede crear una función en SQL para eliminar todos los símbolos de puntuación de una cadena de entrada.

CREATE FUNCTION dbo.fn_RemovePunctuation ( @InputString VARCHAR(500) ) RETURNS VARCHAR(500) AS BEGIN SELECT @InputString = REPLACE(@InputString, P.Symbol, '''') FROM Punctuation P RETURN @InputString END GO

Luego puede llamar a la función en su instrucción UPDATE

UPDATE tblMyTable SET FieldName = dbo.fn_RemovePunctuation(FieldName)


Me gustaría envolverlo en un UDF escalar simple para que toda la limpieza de cuerdas esté en un lugar si es necesario de nuevo.

Entonces puedes usarlo también en INSERTAR ...



Si se trata de algo único, usaría un fragmento C # + LINQ en LINQPad para hacer el trabajo con expresiones regulares.

Es rápido y fácil y no tiene que pasar por el proceso de configuración de un procedimiento almacenado de CLR y luego limpiarlo usted mismo.


¿No puedes usar PATINDEX para incluir solo NÚMEROS y LETRAS en lugar de tratar de adivinar qué puntuación puede haber en el campo? (No tratando de ser sarcástico, si tuviera el código listo, lo compartiría ... pero esto es lo que estoy buscando).

Parece que necesita crear una función personalizada para evitar una lista gigante de funciones de reemplazo en sus consultas. He aquí un buen ejemplo:

http://www.codeproject.com/KB/database/SQLPhoneNumbersPart_2.aspx?display=Print


Quería evitar crear una tabla y quería eliminar todo, excepto letras y dígitos.

DECLARE @p int DECLARE @Result Varchar(250) DECLARE @BadChars Varchar(12) SELECT @BadChars = ''%[^a-z0-9]%'' -- to leave spaces - SELECT @BadChars = ''%[^a-z0-9] %'' SET @Result = @InStr SET @P =PatIndex(@BadChars,@Result) WHILE @p > 0 BEGIN SELECT @Result = Left(@Result,@p-1) + Substring(@Result,@p+1,250) SET @P =PatIndex(@BadChars,@Result) END