大家好 - 我需要您提供以下代码行的帮助。目前正在开发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
如何修改代码以使其按预期工作?
非常感谢。
答案 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()
隐式转换为字符,之后无需转换为字符。