如何编写SQL查询以从选定列中删除给定的特殊字符集?

时间:2018-11-19 20:13:30

标签: sql sql-server tsql sql-server-2017

我有一张桌子[ABCTable]

当我用

查询时
SELECT [XYZ] from [ABCTable] 

返回的[XYZ]行集可能包含-[〜],[!],[@],[#],[$],[%],[^],[&], [*],[,],[。],[?]。

是否可以编写仅SQL查询(不是存储过程或子例程)以确保在选择所需数据时删除了这些字符?

1 个答案:

答案 0 :(得分:3)

你想要类似的东西

CREATE TABLE T(
  ID INT IDENTITY(1,1),
  Value VARCHAR(45)
);

INSERT INTO T(Value) VALUES
('.A*B$C@'),
('D#E$,F'),
('.G,H*I@$'); 

DECLARE @Chars VARCHAR(45) = '@$.,*#';

SELECT *, REPLACE(TRANSLATE(Value, @Chars, REPLICATE(' ', LEN(@Chars))), ' ', '') Result
FROM T;

返回:

+----+----------+--------+
| ID |  Value   | Result |
+----+----------+--------+
|  1 | .A*B$C@  | ABC    |
|  2 | D#E$,F   | DEF    |
|  3 | .G,H*I@$ | GHI    |
+----+----------+--------+

Demo

注意::如果那里有空格,我建议您使用CHAR(9)代替

REPLACE(TRANSLATE(Value, @Chars, REPLICATE(CHAR(9), LEN(@Chars))), CHAR(9), '')