【发布时间】:2017-11-28 08:04:22
【问题描述】:
我有这个红移 SQL 查询。我使用“REGEXP_SUBSTR”函数从评论中提取了一个带小数的数字。我还需要将它从字符串转换为数字/十进制。然后,我需要从总数中减去这个数字。
这是我的查询
SELECT sc.comment,
sm.subtotal,
to_number(REGEXP_SUBSTR(sc.comment, '[0.00-9]+..[0.00-9]+', 1),'9999999D99')
FROM "sales_memo_comments" sc INNER JOIN "sales_memo" sm ON sc.foreign_id = sm.parent_id
我尝试在 Redshift SQL 上使用“to_number”函数,但它给了我以下信息:错误:数字类型的输入语法无效:“”
这是当前输出之前从评论栏中提取号码退款金额:
comment
"SAR719.00 Refund transaction executed successfully, Refund Request ID:504081288877953603 \n , Authorization Code:095542 "
"AUD52.07 Refund transaction executed successfully, Refund Request ID:6J45695858A90833"
Canceled by : ron.johnd@company.co.us
refund amount is [MYR197.41]
"Please Ignore Order refunded by Refund Request ID:5002758809696048 , Authorization Code:2587759"
OMR37.83($98.23) Refund transaction executed successfully
这是在使用上述带有 REGEXP 的 SQL 查询之后的结果。我仍然遇到一些异常情况。
comment
719
52.07
.co.
197.41
5.0027621
37.83($98.23
两个问题
- 如何编辑 REGEXP 以考虑上述异常情况
- 如何将字符串 REGEXP 转换为数值以与另一个数值列相减?
任何帮助将不胜感激。
【问题讨论】:
-
您确定可以使用正则表达式从字符串中提取所有行的数字吗?似乎您可能会遇到特定行或行的转换错误,这可能不是转换为数字的所需形式。
-
是的,你是对的,使用正则表达式后有一些空行。评论栏是记录退款的地方,有些cmet没有输入号码。
-
评论部分的退款金额旁边有“$”符号,其他有超过小数的数字(人为错误)......大约有 20% 的数据是这样的...... .
-
这意味着您必须对正则表达式进行更改以适应这些行。
-
感谢您的提示。你说的对。您有什么想法可以容纳我不想带任何“$”“()”符号或没有可用数字的行吗?
标签: amazon-redshift aws-redshift