使用 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
上的工作演示
假设我有一个字符串:
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