首页 > 解决方案 > Oracle SQL 正则表达式 - 在正则表达式查询中传递变量名称

问题描述

我想在我的 Oracle SQL 查询中使用一个使用正则表达式进行过滤的变量。当我在 SQL 查询中硬编码所需的字符串(“TKelly”)时,原始查询工作正常:

SELECT Custom_Unique_Name from USERS
WHERE REGEXP_LIKE (Custom_Unique_Name, '^TKelly[^A-Za-z][0-9]*') 

输出:

CUSTOM_UNIQUE_NAME
------------------
TKelly1
TKelly3
TKelly2

但是,当我尝试在同一个查询中使用变量时,它的工作方式并不完全相同。

variable vname varchar2(20)
exec :vname := 'TKelly';

PL/SQL procedure successfully completed.

SELECT Custom_Unique_Name from USERS
WHERE REGEXP_LIKE (Custom_Unique_Name, '^'|| :vname || [^A-Za-z][0-9]'*');

输出:

ORA-00936: missing expression
00936. 00000 -  "missing expression"

标签: sqlregexoracle

解决方案


您缺少正则表达式其余部分的单引号:

WHERE REGEXP_LIKE(Custom_Unique_Name,
                  '^'|| :vname || '[^A-Za-z][0-9]*'
                 );

推荐阅读