【问题标题】:Remove characters from text using TRANSLATE function (replace them with empty strings)使用 TRANSLATE 函数从文本中删除字符(用空字符串替换它们)
【发布时间】:2019-07-22 10:05:17
【问题描述】:

假设我有一个字符串:

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

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

通常我会使用 REPLACE 函数,例如:

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

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

【问题讨论】:

    标签: sql-server sql-server-2016 sql-server-2017


    【解决方案1】:

    您可以尝试以下查询:

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

    它会将输出返回为abrakadabra

    db<>fiddle 上的工作演示

    【讨论】:

    • 请注意,在给出的示例中,您不需要在翻译中包含 # 字符,因为它用作其他字符的替换字符,稍后会替换:replace(translate(@text, '_-', '##'), '#', '') .
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 我建议使用原始字符之一而不是|,如果源字符串中存在,则不应触摸它。例如。 REPLACE(TRANSLATE(YourColumn, '-_','##'),'#','')
    • 没有注意到多余的(,一定是双击了键。谢谢@RuudHelderman。角色重用的好处也是。
    猜你喜欢
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 2017-07-26
    相关资源
    最近更新 更多