Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何编写SQL查询以从选定列中删除给定的一组特殊字符?_Sql_Sql Server_Tsql_Sql Server 2017 - Fatal编程技术网

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

如何编写SQL查询以从选定列中删除给定的一组特殊字符?,sql,sql-server,tsql,sql-server-2017,Sql,Sql Server,Tsql,Sql Server 2017,我有一张桌子 当我询问 SELECT [XYZ] from [ABCTable] 返回的[XYZ]行集可能包含-[~]、[!]、[@]、[#]、[$]、[%]、[^]、&]、[*]、[、]、[.]、[?] 有没有办法只写一个SQL查询(而不是存储过程或子例程)来确保在选择所需数据时删除这些字符?是否需要类似的操作 CREATE TABLE T( ID INT IDENTITY(1,1), Value VARCHAR(45) ); INSERT INTO T(Value) VALUE

我有一张桌子

当我询问

SELECT [XYZ] from [ABCTable] 
返回的[XYZ]行集可能包含-[~]、[!]、[@]、[#]、[$]、[%]、[^]、&]、[*]、[、]、[.]、[?]


有没有办法只写一个SQL查询(而不是存储过程或子例程)来确保在选择所需数据时删除这些字符?

是否需要类似的操作

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    |
+----+----------+--------+

注意:如果您有空白,我建议您使用
CHAR(9)
作为

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

创建可以为您执行此操作的函数。有什么原因不能只对每个字符使用
REPLACE
吗?在SQL Server中,这通常使用大量嵌套的
REPLACE
来完成,因为它缺少
translate
RegExp\u REPLACE
:-(不完全正确@dnoeth@Larnu:Great,最终在SQL Server 2017中可用,但为什么MS以不同的方式实现它,因此它不能用于删除字符(不知道列中不存在的字符,并添加最终的
替换
)?正如我在评论中所写,您需要将其嵌套在替换中,希望数据中没有空格…此解决方案适用于您提供的示例数据,但我不会使用空格作为虚拟替换值。显然,有空格的值会弄乱。我会使用CHAR(1)或其他不太常见的字符。