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

Remove characters from text using TRANSLATE function (replace them with empty strings)

假设我有一个字符串:

DECLARE @text VARCHAR(20) = 'abr_akad-ab#ra';

我想从文本中删除所有 _-# 个字符。

通常我会使用 REPLACE 功能,例如:

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

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

您在某些时候仍然需要使用 REPLACE,因为 SQL 服务器要求 TRANSLATE 的参数 2 和 3 的长度相同。因此像下面这样的表达式会出错:

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

因此,您可以使用 TRANSLATE 将它们全部替换为不同的字符,然后替换该字符:

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

您可以尝试以下查询:

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

它将return输出为abrakadabra

db<>fiddle

上的工作演示