如何使用Oracle从firstname.lastname@email.com中提取姓氏?

时间:2010-03-26 22:03:57

标签: sql oracle plsql

我需要将列(LASTNAME)的值与系统变量(:VARIABLE)进行比较,但该变量是电子邮件地址,因此我需要修剪“@ email.com”和“firstname”。我试过的一些事情:

select * 
  from TABLENAME 
 where LASTNAME LIKE :VARIABLE

select * 
  from TABLENAME 
 where LASTNAME IN :VARIABLE

我已经能够删除@ email.com,无法弄清楚如何修剪FIRSTNAME。在同一时间。

3 个答案:

答案 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, '@')) || '%'

如果您需要确定不区分大小写的匹配,请向两侧添加UPPERLOWER

参考:

答案 2 :(得分:0)

您可以使用SUBSTR和INSTR的组合。

instr函数返回字符串中子字符串的位置。有了这个,您可以找到“。”或“@”字符。

然后使用substr从起始位置获取子字符串

SELECT SUBSTR('取前四个字符',1,4)