繁体   English   中英

如何在sql Postgresql中获取字符串变量

[英]How to get a string variable in sql Postgresql

有人可以帮我设置一个 SQL 命令,该命令仅检索字符串中第一次出现“成本”的值,如下例所示。

请参阅下面从我存储 sql 查询执行计划的表返回的两个结果。 我使用 Postgres。 cost 这个词总是出现在开头,但它并不总是出现在相同的位置,所以你不能简单地做 substring (...)。 我认为您应该每次都找到初始和最终位置,以便能够仅提取成本值。 如果有人可以帮助我,下面示例的预期结果是:

select (.... )
-----------------
cost=399301  (only this)

----------------------示例字符串源 ------------------

Sort  (cost=399301.55..399301.57 rows=6 width=36)
  Sort Key: l_returnflag, l_linestatus
  ->  HashAggregate  (cost=399301.21..399301.48 rows=6 width=36)
        ->  Seq Scan on h_lineitem  (cost=0.00..250095.98 rows=5968209 width=36)
              Filter: (l_shipdate <= (to_date('1998/12/01'::text, 'YYYY/MM/DD'::text) - '10 days'::interval day))

-------------------- 第二个样品 ---------------------------- ----

Aggregate  (cost=7922058.70..7922058.71 rows=1 width=16)"
  ->  Hash Join  (cost=1899763.92..7922058.69 rows=1 width=16)"
        Hash Cond: (h_lineitem.l_partkey = h_part.p_partkey)"
        Join Filter: (((h_part.p_brand = 'Brand#13'::bpchar) AND (h_part.p_container = ANY ('{"SM CASE","SM BOX","SM PACK","SM PKG"}'::bpchar[])) AND (h_lineitem.l_quantity >= 4::double precision) AND (h_lineitem.l_quantity <= 14::double precision) AND (h_ (...)"
        ->  Seq Scan on h_lineitem  (cost=0.00..235156.84 rows=211094 width=32)"
              Filter: ((l_shipmode = ANY ('{AIR,"AIR REG"}'::bpchar[])) AND (l_shipinstruct = 'DELIVER IN PERSON'::bpchar))"
        ->  Hash  (cost=1183158.46..1183158.46 rows=35278997 width=33)
->  Seq Scan on h_part  (cost=0.00..1183158.46 rows=35278997 width=33) Filter: (p_size >= 1)"

此致

假设计划存储在一个名为表plan_table在名为execution_plan您可以使用以下命令:

select replace(substring(execution_plan from '\(cost=[0-9]+'), '(cost=', '')
from plan_table;

substring(...)返回(cost=的第一次出现,然后replace用于删除该前缀。

我成功了,解决方案是,目标是获得值 27726324.41,最终开发的 Expression Regular 是:

select substring('Aggregate (cost=27726324.40..27726324.41 Rows' from '[.]Y*([0-9]+.?[0-9]{2})') 

结果 27726324.41

感谢 a_horse_with_no_name 和其他帮助我的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM