gpt4 book ai didi

oracle - 基于字符和数字的 PL/SQL Regex 搜索

转载 作者:行者123 更新时间:2023-12-05 09:08:59 25 4
gpt4 key购买 nike

我有一个表 TA,其中有一列 inv_ref,其数据如下。

inv_ref
----------
MX/3280/20
CT/3281/20
CT/3109/20
MX/3272/20
RF/3275/20

我的要求是获取介于 3270 到 3299 之间的 inv_ref 的中间 4 位数字MXCT 开头.

select * from TA where regexp_like(inv_ref, 'CT/32[7-9][0-9]/20')

以上查询只返回CT,如何返回CTMX相关值而忽略RF

最佳答案

您可以使用:

SELECT *
FROM TA
WHERE REGEXP_LIKE(inv_ref, '^(CT|MX)/32[7-9][0-9]/20$')

那么如果你有测试数据:

CREATE TABLE TA ( inv_ref, is_valid ) AS
SELECT 'MX/3280/20', 'Valid' FROM DUAL UNION ALL
SELECT 'CT/3281/20', 'Valid' FROM DUAL UNION ALL
SELECT 'CT/3109/20', 'Invalid, number too low' FROM DUAL UNION ALL
SELECT 'MX/3272/20', 'Valid' FROM DUAL UNION ALL
SELECT 'RF/3275/20', 'Invalid, wrong start' FROM DUAL UNION ALL
SELECT 'CX/3299/20', 'Invalid, wrong start' FROM DUAL UNION ALL
SELECT 'MT/3270/20', 'Invalid, wrong start' FROM DUAL UNION ALL
SELECT 'ACT/3270/20', 'Invalid, wrong start' FROM DUAL;

这个输出:

INV_REF    | IS_VALID:--------- | :-------MX/3280/20 | Valid   CT/3281/20 | Valid   MX/3272/20 | Valid   

db<> fiddle here

关于oracle - 基于字符和数字的 PL/SQL Regex 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62830289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com