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。字符的重用也很好。