Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 server 使用TRANSLATE函数从文本中删除字符(用空字符串替换)_Sql Server_Sql Server 2016_Sql Server 2017 - Fatal编程技术网

Sql server 使用TRANSLATE函数从文本中删除字符(用空字符串替换)

Sql server 使用TRANSLATE函数从文本中删除字符(用空字符串替换),sql-server,sql-server-2016,sql-server-2017,Sql Server,Sql Server 2016,Sql Server 2017,假设我有一个字符串: DECLARE @text VARCHAR(20) = 'abr_akad-ab#ra'; 我想从文本中删除所有-#字符 通常,我会使用替换函数,类似于: SELECT REPLACE(REPLACE(REPLACE(@text, '-', ''), '_', ''),'#','') 我可以用单个TRANSLATE语句以某种方式实现这一点吗?在某些时候仍然需要使用REPLACE,因为SQL Server要求TRANSLATE的参数2和3的长度相同。因此,类似以下的表达式

假设我有一个字符串:

DECLARE @text VARCHAR(20) = 'abr_akad-ab#ra';
我想从文本中删除所有
-#
字符

通常,我会使用
替换
函数,类似于:

SELECT REPLACE(REPLACE(REPLACE(@text, '-', ''), '_', ''),'#','')

我可以用单个
TRANSLATE
语句以某种方式实现这一点吗?

在某些时候仍然需要使用
REPLACE
,因为SQL Server要求
TRANSLATE
的参数2和3的长度相同。因此,类似以下的表达式将出现错误:

TRANSLATE(YourColumn, '-_#','')
因此,您可以使用
TRANSLATE
将它们全部替换为不同的字符,然后替换该字符:

REPLACE(TRANSLATE(YourColumn, '-_#','|||'),'|','')

您可以尝试以下查询:

DECLARE @text AS VARCHAR(20) = 'abr_akad-ab#ra';
SELECT REPLACE(TRANSLATE(@text, '_-#', '###'), '#', '')
它将以
abrakadabra


上进行演示时,我建议使用一个原始字符,而不是
|
,如果源字符串中存在该字符,则不应触摸该字符。例如,
REPLACE(翻译(你的专栏,“-”,“##,”,“##,”)
没有注意到额外的
),一定是双击了键。谢谢@RuudHelderman。字符的重用也很好。