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,'' '',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 ...
Puede usar expresiones regulares en SQL Server - aquí hay un artículo basado en SQL 2005:
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