SQL 分离数字和字符数据,你很不幸地把数字和字符数据混合存放进一列。你想把其中的数字数据和字符数据分开,考虑如下的结果集。
SQL 分离数字和字符数据 问题描述
你很不幸地把数字和字符数据混合存放进一列。你想把其中的数字数据和字符数据分开,考虑如下的结果集。
你希望得到如下的结果集。
SQL 分离数字和字符数据 解决方案
使用内置函数 TRANSLATE
和 REPLACE
来分离字符数据和数字数据。与本章的其他实例类似,此处的技巧在于使用 TRANSLATE
函数把多种字符替换成一个指定的字符。这样一来只要用一个数字就能代表所有数字,一个字符就能代表所有字符,因此我们就不再需要逐一查找多个数字或字符了。
DB2
使用 TRANSLATE
和 REPLACE
函数分离数字和字符数据。
Oracle
使用 TRANSLATE
和 REPLACE
函数分离数字和字符数据。
PostgreSQL
使用 TRANSLATE
和 REPLACE
函数分离数字和字符数据。
SQL 分离数字和字符数据 扩展知识
每个数据库管理系统的语法都略有不同,但方法是一样的。在本节的讨论中,我将以 Oracle 解决方案为主。解决本问题的关键在于分离数字和字符数据,使用 TRANSLATE
和 REPLACE
函数可以实现这一点。为了提取数字,首先用 TRANSLATE
函数把所有的字符数据分离出来。
使用 TRANSLATE
函数把每一个非数字字符都替换为小写字母 z。然后使用 REPLACE
函数删除所有的小写字母 z,这样就只留下数字字符,我们可以将其转换为一个数字。
为了提取非数字字符,需要使用 TRANSLATE
函数隔离数字字符。
使用 TRANSLATE
函数把每一个数字字符替换为 0,然后使用 REPLACE
函数删除每条记录中出现的 0,剩下的就只有非数字字符。
最后,将上述两个方法结合起来就是本问题的解决方案。