select regexp_substr((select sst.param_value from 表 sst ,'[^,]+',1,rownum) from dual connect by rownum <![CDATA[<=]]>length((select sst.param_value from 表 sst))-length(repalce((select sst.param_value from 表 sst),','))+1 改为pgsql语法
时间: 2024-02-06 20:04:23 浏览: 28
在 PostgreSQL 中,可以使用 `split_part` 函数来实现类似的效果。以下是将原始查询语句转换为 PostgreSQL 语法的示例:
```
SELECT split_part(param_value, ',', rownum)::text
FROM 表 sst, generate_series(1, length(replace(param_value, ',', ''))) AS rownum
WHERE param_item = 'usern_no';
```
其中,`generate_series(1, length(replace(param_value, ',', '')))` 用于生成从 1 到字符串中逗号的数量的整数序列。`split_part` 函数用于从字符串中按照逗号分割,并返回指定位置的子串。注意,`split_part` 函数返回的数据类型为 `text`,需要使用 `::text` 进行类型转换。
相关问题
select regexp_substr((select sst.param_value from 表 sst,'[^,]+',1,rownum) from dual connect by rownum <=1 改为pgsql语法
在 PostgreSQL 中,可以使用正则表达式函数 `regexp_matches` 来实现类似 `regexp_substr` 的功能。下面是将给定的 SQL 语句转换为 PostgreSQL 语法的示例:
```
SELECT regexp_matches((SELECT sst.param_value FROM 表 sst LIMIT 1 OFFSET 0), '[^,]+', 'g');
```
其中,`LIMIT 1 OFFSET 0` 相当于 Oracle 中的 `ROWNUM <= 1`,表示只返回一行结果。`'[^,]+'` 是 PostgreSQL 中的正则表达式,表示匹配非逗号字符的连续序列。`'g'` 参数表示全局匹配,即匹配所有符合条件的子串。
需要注意的是,PostgreSQL 中的 `regexp_matches` 函数返回的是一个数组,如果只需要取第一个匹配结果,可以使用数组下标 `[1]`,即:
```
SELECT regexp_matches((SELECT sst.param_value FROM 表 sst LIMIT 1 OFFSET 0), '[^,]+', 'g')[1];
```
select regexp_substr((select sst.param_value from 表 sst where sst.param_item='usern_no','[^,]+',1,rownum) from dual connect by rownum <![CDATA[<=]]>length((select sst.param_value from 表 sst where sst,param_item='user_no'))-length(repalce((select sst.param_value from 表 sst where sst.param_item='user_no'),','))+1 改为pgsql语法
在 PostgreSQL 中,可以使用正则表达式函数 `regexp_matches` 或 `regexp_split_to_array` 来达到类似的效果。以下是使用 `regexp_matches` 函数的示例:
```
SELECT regexp_matches(param_value, '[^,]+', 'g')
FROM 表
WHERE param_item = 'usern_no';
```
其中,`'[^,]+'` 表示匹配不包含逗号的任意字符序列,`'g'` 表示全局匹配。如果要返回匹配的第一个结果,可以使用以下语句:
```
SELECT regexp_matches(param_value, '[^,]+')[1]
FROM 表
WHERE param_item = 'usern_no';
```
注意,PostgreSQL 中没有类似 Oracle 的 `dual` 表,可以使用 `SELECT` 语句中的 `FROM` 子句来代替。