SQL - 从字符串中删除所有字母(字母字符)
SQL - remove all letters (alpha characters) from a string
我正在尝试编写一个函数,从字符串中删除 26 个字母中出现的任何一个。
输入:'AA123A' -> 输出:'123'
在:'AB-123-CD% -> Out: '-123-%'
我在 Google 上只能找到如何删除非数字字符,这些字符似乎都是围绕定义要保留的数字形成的。但我也想保留任何符号。
'simple' 答案是每个字母有 26 个嵌套的 REPLACE,但我不敢相信没有更好的方法来做到这一点。
我可以定义一个 A-Z 字符串并遍历每个字符,调用 REPLACE 26 次 - 使代码更简单但功能相同。
谁有优雅的解决方案?
如果我没理解错的话,你可以使用TRANSLATE,例如:
SELECT REPLACE(TRANSLATE('AB-123- CDdcba%', 'ABCDabcd',' '), ' ', '');
SELECT REPLACE(TRANSLATE('AB-123- CDdcba%', 'ABCDabcd','AAAAAAAA'), 'A', '');
- 第一个案例修剪也有空格,
- 第二个,保留现有空间。
只需将其余字符添加到 'ABCDabcd'
参数并保持 'AAAAAAAA'
与第二个参数相同的长度。
我正在尝试编写一个函数,从字符串中删除 26 个字母中出现的任何一个。
输入:'AA123A' -> 输出:'123'
在:'AB-123-CD% -> Out: '-123-%'
我在 Google 上只能找到如何删除非数字字符,这些字符似乎都是围绕定义要保留的数字形成的。但我也想保留任何符号。
'simple' 答案是每个字母有 26 个嵌套的 REPLACE,但我不敢相信没有更好的方法来做到这一点。 我可以定义一个 A-Z 字符串并遍历每个字符,调用 REPLACE 26 次 - 使代码更简单但功能相同。
谁有优雅的解决方案?
如果我没理解错的话,你可以使用TRANSLATE,例如:
SELECT REPLACE(TRANSLATE('AB-123- CDdcba%', 'ABCDabcd',' '), ' ', '');
SELECT REPLACE(TRANSLATE('AB-123- CDdcba%', 'ABCDabcd','AAAAAAAA'), 'A', '');
- 第一个案例修剪也有空格,
- 第二个,保留现有空间。
只需将其余字符添加到 'ABCDabcd'
参数并保持 'AAAAAAAA'
与第二个参数相同的长度。