【发布时间】:2022-01-09 00:34:22
【问题描述】:
我正在尝试编写一个函数,从字符串中删除任何出现的 26 个字母。
输入:'AA123A' -> 输出:'123'
输入:'AB-123-CD% -> 输出:'-123-%'
我在 Google 上只能找到如何删除非数字字符,这些字符似乎都是围绕定义要保留的数字而形成的。但我也想保留任何符号。
“简单”的答案是每个字母有 26 个嵌套 REPLACE,但我不敢相信没有更好的方法可以做到这一点。 我可以定义一个 A-Z 字符串并循环遍历每个字符,调用 REPLACE 26 次 - 使代码更简单但功能相同。
有没有人有一个优雅的解决方案?
【问题讨论】:
-
您的 DBMS 是什么?你有其他软件处理记录插入吗?它比 SQL 更适合您的软件执行此操作。
-
优雅的解决方案是使用编程语言而不是 sql 来完成。话虽如此,一些数据库支持(或至少部分支持)正则表达式 - 包括 regex_replace - 这意味着它可以通过单个替换来完成。
-
不同的数据库平台对这类事情有不同的功能/语法。例如,在 postgres 中,您可以使用正则表达式,而对于 MS SQL Server,这并不总是一种选择。始终为您的特定平台/DBMS 添加标签是一个好主意(至少)。
-
谢谢。它是一个 MS SQL 服务器,特别是 Azure SQL 服务器。我很确定 regex_replace 不受支持,因为我已经尝试过其中一种。不幸的是,对于数据的导入,我们无能为力。看起来它可能是循环——我之前写过一个用于删除参数化符号字符串的循环——所以这没什么大不了的。作为一种方法,它并不是很理想。
-
replace(translate('abc123afz', 'abcdefghijklmnopqrstuvwxyz', replicate('a',26)), 'a', '').. dbfiddle.uk/…
标签: sql sql-server replace alphanumeric