![](/img/trans.png)
[英]How to assign multiple variable and string in a variable in 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.