我有一个包含货币和价值的列。基本变体是PPM interactive shell (11.11_03) - type 'help' for available commands.
PPM> install DateTime
Install package 'DateTime?' (y/N): y
Installing package 'DateTime'...
Error installing package 'DateTime': Could not locate a PPD file for package DateTime
PPM>
我必须将值和货币分隔到不同的列。
在某些情况下,其中一个不存在,因此字符串看起来像'USD 100000000.00'
- 从' 100000000.00'
或space
开始 - 以'USD '
结束。
作品正确:
space
空val:
SELECT to_number(regexp_substr('USD ','[^ ]+', 1, 2)) as val from dual;
空val也是(正确):
SELECT to_number(regexp_substr(' 100000000','[^ ]+', 1, 2)) as val from dual;
如何为此案例SELECT to_number(regexp_substr('USD 100000000.00','[^ ]+', 1, 2)) as val from dual;
获取数值?
答案 0 :(得分:1)
您可以使用正则表达式^(\S*)\s+(\S*)$
来匹配:
然后分别提取第一和第二个捕获组作为货币和金额:
SELECT REGEXP_SUBSTR(
your_currency_string,
'^(\S*)\s*(\S*)$',
1,
1,
NULL,
1 -- 1st capture group
) AS currency,
TO_NUMBER(
REGEXP_SUBSTR(
your_currency_string,
'^(\S*)\s*(\S*)$',
1,
1,
NULL,
2 -- 2nd capture group
)
) AS amount
FROM your_table
如果您想对正则表达式进行更严格的限制,那么您可以使用:
^(\S*)\s+(([1-9]\d*|0)?\.?\d{0,2})$
哪个匹配数字,可选,最多2个小数位,并且整数部分没有前导零(即0
和1000
,但00
和{{1}不是 - 但如果你不想要这个限制,你可以使用01000
。
您也可以匹配字符串的开头和结尾:
(\d*\.?\d{0,2})$