Sql Oracle-修剪和前导0

Sql Oracle-修剪和前导0,sql,oracle,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 ex

嗨,伙计们,我需要你们帮助我完成下面这行代码。目前正在处理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
如何修改代码使其按预期工作


非常感谢。

您没有正确使用
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,则此方法将不起作用。要解决此问题,请首先删除前导零,然后在长度大于9时调用
substr()
(使用
if
语句):


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

请尝试执行此操作

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

它对我有效。

如果删除前导零后,位数小于9,该怎么办?但是,如果删除前导零后,位数小于9,该方法将不起作用。要解决此问题,请首先删除前导零,然后在长度大于9时调用substr(使用
if
语句)
TRIM()
隐式转换为字符,之后无需转换为字符(加上用双引号括起来,它已经是字符串文字)。“我也不知道你为什么要在最后再修剪一次?”本,谢谢你。我编辑了答案。我也不知道为什么OP会在最后第二次修剪。
THEN TRIM(substr((TO_CHAR(TRIM(LEADING 0 FROM s.sales_number))),0))