繁体   English   中英

Oracle-案例说明

[英]Oracle - Case Statement

您好–我在以下案例声明中寻求您的帮助,但是我不确定如何相应地进行更改。 能否请你帮忙? SQL新手,但学习。

这是必需的

当sales_number以零/ s开头,然后删除前导零,因此sales_number总共为14个字符,然后将sales_number(14位数字)与sales_date和sales_amount连接起来,当sales_number小于16个字符时,然后将sales_number和sales_date和销售额

这是我创建案例陈述的尝试

CASE
when length(to_char(remove leading zeros from sales_number)) = 14
then to_char(sales_number without leading zeros)) || sales_date ||sales_amount
when  sales_number < 16
then right(to_char(last nine characters from sales_number and sales_date and sales_amount)

非常感谢。

也许这可以让您对您的需求有所了解;

with test(sales_number, sales_date, sales_amount) as 
(
select '001245JNF690864350', sysdate, 100 from dual union all
select 'SD895394KK9746K0000334', sysdate, 100 from dual union all
select '3850956789025417', sysdate, 100 from dual
)
select case
        when regexp_like(sales_number, '^0{1,}') /* starts with one or more zeros */ 
            then ltrim(sales_number, '0') /* remove leading zeros */
                 || sales_date ||sales_amount
        when length(sales_number) = 16
            then substr(sales_number, -9) /* last 9 chars */
                 || sales_date ||sales_amount
        else
            '' /* what to do here? */ 
    end
from test

当您的条件都不匹配时,我不清楚该怎么办,所以我把它留空了。 希望这可以帮助您找到解决方案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM