用pgsql查询以下数据: 、在110kV天堂变电站10kV湾中线#28塔28T12刀闸线路侧装设10kv/接地线1组。 2、在110kV天堂变电站10kV湾中线铜接地线一组锣环支线#30杆大号侧装设10kv/接地线一组。 3、在110kV天堂变电站10kV湾中线铜接地线锣三组环支线#30杆大号侧装设10kv/=组。 先提取“接地线”和最近的“组”之间的内容, 后判断“接地线”和“组”之间是否为阿拉伯数字
时间: 2024-03-17 19:42:08 浏览: 46
可以使用正则表达式函数regexp_matches()结合substring()函数来提取“接地线”和最近的“组”之间的内容,然后再使用regexp_matches()函数判断提取出来的内容中是否包含阿拉伯数字。
以下是示例代码:
```sql
SELECT
CASE
WHEN regexp_matches(substring(description, '接地线(\S*?)组'), '\d+', 'g') IS NOT NULL THEN '是'
ELSE '否'
END AS is_arabic_num
FROM data_table;
```
其中,description是包含上述三条数据的字段名,data_table是包含description字段的表名。
这个查询会返回一个包含一列名为is_arabic_num的结果集,其中每一行表示对应的数据行中“接地线”和最近的“组”之间是否为阿拉伯数字的判断结果。如果是阿拉伯数字,则返回“是”,否则返回“否”。
相关问题
用pgsql查询以下数据: 1、在110kV天堂变电站10kV湾中线#28塔28T12刀闸线路侧装设10kv/接地线1组。 2、在110kV天堂变电站10kV湾中线铜接地线一组锣环支线#30杆大号侧装设10kv/接地线一组。 3、在110kV天堂变电站10kV湾中线铜接地线锣三组环支线#30杆大号侧装设10kv/=组。 要求: 提取“接地线”和最近的“组”之间的内容,若有多个,则用顿号隔开 ,
假设数据存储在名为“data”的表中,可以使用以下SQL查询语句来提取需要的信息:
```
SELECT
substring(description, '接地线(.+?)组') as grounding_info
FROM
data
WHERE
description LIKE '%接地线%'
ORDER BY
position('组' IN substring(description, position('接地线' IN description))) ASC;
```
解释一下上述查询语句的各部分:
- `substring(description, '接地线(.+?)组')`:使用正则表达式从字段"description"中提取出"接地线"和"组"之间的内容。其中".+?"表示任意字符的非贪婪匹配,保证只匹配到最近的"组"。
- `WHERE description LIKE '%接地线%'`:筛选出包含"接地线"的记录。
- `ORDER BY position('组' IN substring(description, position('接地线' IN description))) ASC`:按照从"接地线"到最近的"组"的距离升序排序,以确保提取的是最近的"组"。
这样,查询结果就只包含"接地线"和最近的"组"之间的内容,多个内容之间用逗号隔开。
有以下三条数据 1、在110kV天堂变电站10kV湾中线#28塔28T12刀闸线路侧装设10kv/接地线1组。 2、在110kV天堂变电站10kV湾中线铜接地线一组锣环支线#30杆大号侧装设10kv/接地线一组。 3、在110kV天堂变电站10kV湾中线铜接地线锣三组环支线#30杆大号侧装设10kv/=组。 用pgsql 判断“接地线”和“组”之间是否为阿拉伯数字
可以使用正则表达式函数regexp_matches()来判断“接地线”和“组”之间是否为阿拉伯数字。
以下是示例代码:
```sql
SELECT
CASE
WHEN regexp_matches(description, '接地线(\d+)组', 'g') IS NOT NULL THEN '是'
ELSE '否'
END AS is_arabic_num
FROM data_table;
```
其中,description是包含上述三条数据的字段名,data_table是包含description字段的表名。
这个查询会返回一个包含一列名为is_arabic_num的结果集,其中每一行表示对应的数据行中“接地线”和“组”之间是否为阿拉伯数字的判断结果。如果是阿拉伯数字,则返回“是”,否则返回“否”。
阅读全文