postgresql - 如何使用postgres中的where条件获取表的结果包含数字和字符串
问题描述
我有一张如下表
当我从上表中选择 item_no>'1623G'
我想打印下面的结果
1623H | 1623I | 1666 | 1674 | 1912 | 1952 | 1953
我正在尝试以下命令
select * from t where substring(item_no,'([0-9]+)') :: int > 1623G
但它没有给出结果请帮助
解决方案
我会采用正则表达式的方式:
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)
将两个值(行值和比较值)拆分为两个部分(数字和非数字)并分别比较每个部分。
我很好奇是否有更好的解决方案。
推荐阅读
- nginx - Droplet 重启后出现“错误 502 错误网关 - 主机错误”
- angular - 如何将从 MongoDB 获取的数据存储在本地数组中 [MEAN]
- c++11 - BLAS 库如何直接与 boost 多阵列一起使用?
- android - Android:找不到符号类 DataBinderMapperImpl。找不到 android:state_checked 的吸气剂
- javascript - Behat 在 Laravel 中进行登录测试(登录表单的 Js 模式打开)
- java - 简单的字符串发送客户端服务器处理程序 Java
- python - 使用 CLI 将烧瓶应用程序部署到弹性 beanstalk 时出现 502 错误
- docker - 快速 API 应用程序到 docker 容器连接被拒绝
- c++ - 在查找字符频率期间由于更改数组大小而导致的问题
- python - 如何在 lambda 层中本地调试依赖项?