首页 > 解决方案 > 如何使用postgres中的where条件获取表的结果包含数字和字符串

问题描述

我有一张如下表

在此处输入图像描述

当我从上表中选择 item_no>'1623G'

我想打印下面的结果

1623H | 1623I | 1666 | 1674 | 1912 | 1952 | 1953

我正在尝试以下命令

select * from t where substring(item_no,'([0-9]+)') :: int  > 1623G

但它没有给出结果请帮助

标签: postgresqlpostgresql-9.5

解决方案


我会采用正则表达式的方式:

演示:db<>小提琴

WITH cte AS (
    SELECT
        item_no,
        regexp_replace(item_no, '\D', '', 'g')::int AS digit,
        regexp_replace(item_no, '\d', '', 'g') AS nondigit,
        regexp_replace('200a', '\D', '', 'g')::int AS compare_digit,
        regexp_replace('200a', '\d', '', 'g') AS compare_nondigit
    FROM t
)
SELECT
    item_no
FROM
    cte
WHERE
    (digit > compare_digit) OR (digit = compare_digit AND nondigit > compare_nondigit)

将两个值(行值和比较值)拆分为两个部分(数字和非数字)并分别比较每个部分。

我很好奇是否有更好的解决方案。


推荐阅读