如何划分记录并显示其中的特定部分

时间:2014-10-08 08:40:32

标签: sql oracle plsql

我有4列的表。

user_id,  user_name,  password,  full_name
706    ,  29682    ,  29682   ,  Nikolay Valeriev Rusanov
707    ,  30211    ,  30211   ,  Valentin Ognyanov Karamanchev

当我进行选择时,我只需要显示 full_name 列中的姓氏。

查询应返回

user_id,  user_name,  password,  full_name
706    ,  29682    ,  29682   ,  Rusanov
707    ,  30211    ,  30211   ,  Karamanchev

用"空格"分开。 我不能使用substr,因为列中的每个记录都有不同的长度,而且我有超过10000行。

你们可以给我一些SQL查询怎么做?

1 个答案:

答案 0 :(得分:0)

<强> 1 使用简单的SUBSTRINSTR

SQL> WITH DATA AS(
  2  SELECT 'Nikolay Valeriev Rusanov' full_name FROM dual UNION ALL
  3  SELECT 'Valentin Ognyanov Karamanchev' FROM dual UNION ALL
  4  SELECT 'no reason' FROM dual)
  5  SELECT SUBSTR(full_name,instr(full_name,' ',-1)+1) last_name
  6  FROM DATA
  7  /

LAST_NAME
-----------------------------
Rusanov
Karamanchev
reason

SQL>

<强> 2 使用REGULAR EXPRESSION

SQL> WITH DATA AS(
  2  SELECT 'Nikolay Valeriev Rusanov' full_name FROM dual UNION ALL
  3  SELECT 'Valentin Ognyanov Karamanchev' FROM dual UNION ALL
  4  SELECT 'no reason' FROM dual)
  5  SELECT regexp_substr (full_name, '\w*$') last_name
  6  FROM DATA
  7  /

LAST_NAME
-----------------------------
Rusanov
Karamanchev
reason

SQL>