我的输入是一个包含标题_id
和change_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_num
以CN
开头,我可以忽略它并获取数字吗?
_id change_num
123 CN4354, 3243, 7893
456 920, 1232, 9834, 2323
返回
_id change_num
123 4354
456 920
答案 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;