这可能是我想要的简单但无论如何:
我尝试匹配以'01'
结尾的列中的字符串。我目前在我的表达式'[A-Z0-9\-]+01$'
中有这个,它匹配我希望与regex101匹配的字符串类型。它应该匹配的字符串应该是这样的:
1-WA01-0009-01
在链接网站中有效。
这是我用来测试它的SQL:
SELECT *
FROM V_Translog_MDATE_V1
WHERE
REGEXP_LIKE (ITEMNO, '[a-zA-Z0-9\-]+01$')
ORDER BY ARINVT_ID
为什么我的正则表达式不在SQL中运行,因为当我知道有与该模式匹配的字符串时,为什么这不会重新生成?
已关闭但无法正常工作
我这样做似乎没有什么不合适的,希望它可能与列值本身有关。感谢那些尝试过的人的帮助。
答案 0 :(得分:1)
我尝试匹配以
'01'
结尾的列中的字符串。
Oracle 11g R2架构设置:
CREATE TABLE V_Translog_MDATE_V1 ( ARINVT_ID, itemno ) AS
SELECT 1, '1-WA01-0009-01' FROM DUAL UNION ALL
SELECT 2, '1-WA01-0009-02' FROM DUAL UNION ALL
SELECT 3, '%&*^$%"£*&%-01' FROM DUAL UNION ALL
SELECT 4, '%&*^$%"£*&%-02' FROM DUAL;
查询1 :
您可以使用LIKE
:
SELECT *
FROM V_Translog_MDATE_V1
WHERE ITEMNO LIKE '%01'
ORDER BY ARINVT_ID
<强> Results 强>:
| ARINVT_ID | ITEMNO |
|-----------|----------------|
| 1 | 1-WA01-0009-01 |
| 3 | %&*^$%"£*&%-01 |
查询2 :
如果你想使用正则表达式,那么你不需要检查前面的字符:
SELECT *
FROM V_Translog_MDATE_V1
WHERE REGEXP_LIKE( ITEMNO, '01$' )
ORDER BY ARINVT_ID
<强> Results 强>:
| ARINVT_ID | ITEMNO |
|-----------|----------------|
| 1 | 1-WA01-0009-01 |
| 3 | %&*^$%"£*&%-01 |
查询3 :
如果您希望整个字符串与您可接受的前面字符正则表达式匹配,那么您希望在其前面添加^
(字符串开头):
SELECT *
FROM V_Translog_MDATE_V1
WHERE REGEXP_LIKE( ITEMNO, '^[A-Z0-9\-]+01$' )
ORDER BY ARINVT_ID
<强> Results 强>:
| ARINVT_ID | ITEMNO |
|-----------|----------------|
| 1 | 1-WA01-0009-01 |
(否则[A-Z0-9\-]+01$
将与£$£^*&$^"%-01
匹配,因为在最终01
个字符之前至少有一个匹配的字符。)