【问题标题】:How do I extract a digit from a string with a specific prefix using SQL Regex?如何使用 SQL Regex 从具有特定前缀的字符串中提取数字?
【发布时间】:2018-01-21 19:24:55
【问题描述】:

我有一个这样的字符串存储在 Redshift 表列 (event_attribute_value) 中:

[{shipment_id:2409777178,sku:1223XLMNPQR,container_scannable_id:blahblah,order_id:3KNCGS6W,quantity_received:3}]

我想从使用 SQL 正则表达式接收的数量中提取“3”。 'quantity_received' 也可以出现在字符串中的任何位置。

select 
  event_attribute_value,
  regexp_substr(event_attribute_value, '/quantity_received:(\d+)/') as quantity 
from receive_events limit 10;

这就是我试图从字符串中获取 'quantity_received:3' 的方法,但它返回 NULL

【问题讨论】:

  • 改用JSON 解析器。
  • 什么类型的正则表达式? JS?四氯乙烯?你能提供你尝试过但失败的代码吗?
  • 我正在尝试从 Redshift 表的列中提取它。我还没有考虑到 Redshift 有 JSON 解析函数,但它似乎是这样的,所以试一试。
  • 你不能查询相关列而不是整个表行吗?
  • 更新问题。 JSON 解析器无法工作,因为它不是有效的 JSON。

标签: sql regex amazon-redshift


【解决方案1】:

只需使用正则表达式:/quantity_received:(\d+)/,然后提取第一个捕获组。指定语言以获得更具体的解决方案。

【讨论】:

  • 使用 SQL(从 Redshift 表中的列解析)
  • 抱歉,我不了解在 SQL 中使用正则表达式。您应该使用 sql 或其他相关标签标记问题,以便更了解该问题的人可以看到问题并为您提供帮助。
【解决方案2】:

使用 PHP:

$str = '[{shipment_id:2409777178,sku:1223XLMNPQR,container_scannable_id:blahblah,order_id:3KNCGS6W,quantity_received:3}]';
preg_match('/(.*)quantity_received:(\d+)(.*)/', $str, $matches);

echo $matches[2];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多