我不确定如何搜索答案:
select orderid, REGEXP_REPLACE (
orderid,
'^0+(.)',
'\1'
) as new_order_id
from orders
where length('new_order_id') < 6
这不会返回任何内容。但我知道数据存在。如果我这样做:
select orderid, REGEXP_REPLACE (
orderid,
'^0+(.)',
'\1'
) as new_order_id
from orders
order by order_id asc
我得到了订单ID,如1,2,3 ......
那么如何才能找回少于六个的?在返回数据集之后,返回的regexp_replace数据上的操作是否无效。 Oracle是否重要。
另外,我相信我的查询会淘汰所有前导零并将其替换为零。不确定\ 1是什么意思。是的,我复制了它。我以为它什么也没放,这就是我想要的。只需截断前导零。
感谢。
答案 0 :(得分:3)
在您的查询中,
where length('new_order_id') < 6
比较文字字符串'new_order_id'
的长度,而不是字段new_order_id
的值。
尝试删除引号:
where length(new_order_id) < 6
答案 1 :(得分:2)
试试这个:
select * from
(select orderid
, regexp_replace(orderid,'^0+(.)','\1') new_order_id
from orders)
where length(new_order_id) < 6;
您可以避免使用regexp:
select orderid
, ltrim(orderid,'0') new_order_id
from orders
where length(ltrim(orderid,'0'))<6
order by 1;
答案 2 :(得分:1)
字符串'new_order_id'
的长度永远不会小于6.如果oracle不支持使用没有引号的输出列名称,则可能需要执行length(regexp_replace(...)) < 6
(我不知道) )。