Oracle - 修剪和领导0

时间:2016-04-04 04:11:58

标签: sql oracle

大家好 - 我需要您提供以下代码行的帮助。目前正在开发Oracle数据库。

THEN TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM s.sales_number))),6))

以上代码行将删除前导零并获取销售数字的最后9位数字,但不知何故不适用于某些记录,下面是数据示例

Data                expected 
0057889123995683    123995683 this is okay, it is what I expected
0000000300043467    for this I get 3467 but I expect to see is this 800043467

如何修改代码以使其按预期工作?

非常感谢。

2 个答案:

答案 0 :(得分:1)

请尝试执行此操作。

THEN TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM s.sales_number))),0))

它对我有用。

答案 1 :(得分:0)

您没有正确使用substr()来获取最后的第9位数字。相反,您必须将-9作为参数传递给substr()。您只能使用0057889123995683获得正确的结果,因为它只有两个尾随零。

稍微玩一下你的代码,这对我有用:

select TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM '0000000300043467'))),-9)) from dual

将您的代码更改为:

THEN TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM s.sales_number))),-9))

但是,如果删除前导零后,这种方法不会起作用,则位数小于9.要解决此问题,请首先删除前导零,然后如果长度为0,则调用substr()大9(使用IF语句):

trimmed := TRIM(LEADING 0 FROM s.sales_number);

IF LENGTH(trimmed) > 9 THEN
 trimmed := substr(trimmed,-9);
END IF;

如@Ben所示,TRIM()隐式转换为字符,之后无需转换为字符。