【问题标题】:Oracle - Case StatementOracle - 案例陈述
【发布时间】:2016-05-13 08:01:27
【问题描述】:

您好——我正在就以下案例陈述寻求您的帮助,但我不知道如何相应地更改它。能否请你帮忙? SQL 新手,但正在学习。

这是必须的

当 sales_number 以零/s 开头时,删除前导零,因此 sales_number 总共有 14 个字符 然后连接 sales_number(14 位)和 sales_date 和 sales_amount 当 sales_number 少于 16 个字符时 然后连接 sales_number 和 sales_date 和 sales_amount 的最后九个字符

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

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)

非常感谢。

【问题讨论】:

  • 样本数据可能真的有助于传达您想要做的事情。
  • 这是来自 sales_number 001245JNF690864350、SD895394KK9746K0000334、3850956789025417 的示例数据

标签: sql oracle


【解决方案1】:

也许这可以说明您需要什么;

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

当您的条件都不符合时,我不清楚该怎么做,所以我将其留空;希望这可以帮助您找到解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 2023-04-10
    • 2010-10-30
    • 2016-02-21
    • 1970-01-01
    • 2017-03-06
    • 2012-09-08
    相关资源
    最近更新 更多