SQL中REGEXP_EXTRACT拆分食材字段异常,求修正正则表达式
修正Netezza中拆分
ingredients字段的正则表达式 修正后的SQL语句如下:
SELECT order_no, ingredients, REGEXP_EXTRACT(ingredients, '([^\\-]*)', 1) AS x1, REGEXP_EXTRACT(ingredients, '^[^\\-]*\\-([^\\-]*)', 1) AS x2, REGEXP_EXTRACT(ingredients, '^[^\\-]*\\-[^\\-]*\\-([^\\-]*)', 1) AS x3 FROM pizza_orders;
正则调整说明
- x2的修正:原正则
\-([^\\-]*)会匹配字符串中任意位置的-后内容,无法保证只取第一个-后的第二部分。新正则^[^\\-]*\\-([^\\-]*)从字符串开头定位:先匹配第一部分非-内容+第一个-,再捕获后续的非-内容(即第二部分),无第二部分时返回NULL。 - x3的修正:原正则
\-[^\\-]*\\-(.*)会捕获第二个-后的所有内容(含后续-和片段),不符合你需要第三部分的需求。新正则^[^\\-]*\\-[^\\-]*\\-([^\\-]*)明确匹配前两部分内容+对应-,再捕获第三部分的非-内容,无第三部分时返回NULL。
验证结果
| order_no | ingredients | x1 | x2 | x3 |
|---|---|---|---|---|
| 1 | cheese-olives-peppers-olives | cheese | olives | peppers |
| 2 | cheese-olives | cheese | olives | NULL |
| 3 | cheese-tomatoes-olives | cheese | tomatoes | olives |
| 4 | cheese | cheese | NULL | NULL |
内容的提问来源于stack exchange,提问作者wulasa
相关产品推荐
相关产品推荐

