从表索引的值列表中获取第一个值

时间:2015-06-29 12:07:02

标签: sql oracle-sqldeveloper

我的输入是一个包含标题_idchange_num的双列表格。 change_num是一串逗号分隔的数字,对应于更改ID。例如:

    _id     change_num
    123     4354, 3243, 7893
    456     920, 1232, 9834, 2323

我想在change_num的每一行中获取第一个值,因此我的输出如下所示:

    _id     change_num
    123     4354
    456     920

如何停止使用第一个逗号并忽略其后的所有内容?此外,如果change_numCN开头,我可以忽略它并获取数字吗?

    _id     change_num
    123     CN4354, 3243, 7893
    456     920, 1232, 9834, 2323

返回

    _id     change_num
    123     4354
    456     920

3 个答案:

答案 0 :(得分:2)

这是字符串操作。这样的事情应该有效:

select t.id,
       replace(substr(change_num, 1, instr(change_num, ',') - 1), 'CN', '')
from table t;

正如您所知,将id存储在以逗号分隔的列表中是一个坏主意。如果您对数据结构有任何控制权,则应添加联结表。

答案 1 :(得分:0)

试试这个:

SELECT _id,SUBSTRING_INDEX(change_num, ',', 1);

答案 2 :(得分:0)

您可以在oracle 10或更高版本(或其他数据库中的相应函数)中使用REGEXP_SUBSTR函数,并使用正则表达式查询所需的数据:

select _id, REGEXP_SUBSTR(change_num, '\d+') from tablet;