我需要将列(LASTNAME)的值与系统变量(:VARIABLE)进行比较,但该变量是电子邮件地址,因此我需要修剪“@ email.com”和“firstname”。我试过的一些事情:
select *
from TABLENAME
where LASTNAME LIKE :VARIABLE
select *
from TABLENAME
where LASTNAME IN :VARIABLE
我已经能够删除@ email.com,无法弄清楚如何修剪FIRSTNAME。在同一时间。
答案 0 :(得分:3)
正则表达式可以提供帮助:
SQL> SELECT LTRIM(regexp_substr('firstname.lastname@abc.com','\.[^@]*'),'.') last_name from dual;
LAST_NAME
---------
lastname
您的查询可能如下所示:
SELECT *
FROM tablename
WHERE UPPER(LTRIM(regexp_substr(:VARIABLE,'\.[^@]*'),'.')) = UPPER(lastname);
答案 1 :(得分:1)
使用:
SELECT t.*
FROM TABLE t
WHERE t.lastname LIKE '%' || SUBSTR(:VARIABLE,
INSTR(:VARIABLE, '.') +1,
INSTR(:VARIABLE, '@')) || '%'
如果您需要确定不区分大小写的匹配,请向两侧添加UPPER
或LOWER
。
参考:
答案 2 :(得分:0)
您可以使用SUBSTR和INSTR的组合。
instr函数返回字符串中子字符串的位置。有了这个,您可以找到“。”或“@”字符。
然后使用substr从起始位置获取子字符串
SELECT SUBSTR('取前四个字符',1,4)