请帮我解决这个问题。
这是一张表:
| ID_客户端|价值观|
| - ------|- ------|
| 1个|0.46|
| 第二章|百分之二十五|
| 三个|无资料|
| 四个|二十二|
| 五个|十二、二|
| 六个|365%|
| 七|五十四|
我需要从字符串中得到百分比。
这是我需要从查询中获得的结果:
| 身份证|价值观|
| - ------|- ------|
| 1个|0.46|
| 第二章|二十五|
| 三个|零|
| 四个|零|
| 五个|十二、二|
| 六个|三六五|
| 七|五十四|
我尝试了一些regexp,我发现在这里,但这些没有正确工作。
2条答案
按热度按时间tmb3ates1#
正则表达式子字符串操作至少应该是一个很好的开始:
上面的查询将使
values
列只包含数字 * 字符串 *。要获得实际的数字列,您需要某种额外的转换。您的数据似乎同时使用逗号和点作为小数位。您可能需要在我上面的答案的基础上进行额外的替换,以将浮点数转换为适合您的区域设置的正确格式。zyfwsgd62#
从字符串右侧修剪
%
字符,并将小数点规范化为单个字符,然后将TO_NUMBER
与DEFAULT NULL ON CONVERSION ERROR
一起使用,DEFAULT NULL ON CONVERSION ERROR
可从Oracle 12:其中,对于示例数据:
输出:
| 价值|数值|
| - ------|- ------|
| 0.46|点四六|
| 百分之二十五|二十五|
| 无资料|* 无效 |
| 二十二| 无效 *|
| 12.2 |十二、二|
| 365%|三六五|
| 五十四|五十四|
fiddle