代码之家  ›  专栏  ›  技术社区  ›  John Beasley

如果case等于某物,那么减去date

  •  0
  • John Beasley  · 技术社区  · 4 年前

    尝试编写一个查询,检查列是否等于某个值。如果是这样,取日期列的值,然后减去某个值。

    查询如下所示:

    select
      v.voyage "Voyage"
     ,v.service "Service"
     ,to_char(vp.eta_date, 'MONTH dd, yyyy') "ETA"
     ,case 
        when v.service = "USA" then to_char(vp.eta_date, 'MONTH dd, yyyy') - 2
        else 'n/a'
        end as 'Notice'
    from 
      table
    // bunch of joins
    

    当我运行上述程序时,会出现一个错误,内容如下:

    FROM keyword not found where expected
    

    错误指向“通知”一词。

    我基本上想检查一下服务是否等于‘USA’,如果是的话,用eta_日期减去2,给我通知栏中的日期。

    如果没有,则在通知栏中选择“不适用”。

    我做错了什么?我该如何修复它?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Koen Lostrie    4 年前

    有几个语法错误和引号混淆使这一点令人困惑。以下是引号规则(与代码相关)

    • 对字符串使用单引号
    • 列别名使用双引号

    然后是这一部分: to_char(vp.eta_date, 'MONTH dd, yyyy') - 2 它告诉sql引擎从格式为“MONTH dd,yyyy”的字符串中减去2。你的意思可能是从日期(vp.eta_date)减去2天,然后将其格式化为“月日,yyyy”,可以写成 to_char(vp.eta_date - 2, 'MONTH dd, yyyy')

    把这一切放在一起

    select
      v.voyage "Voyage"
     ,v.service "Service"
     ,to_char(vp.eta_date, 'MONTH dd, yyyy') "ETA"
     ,case 
        when v.service = 'USA' then to_char(vp.eta_date - 2, 'MONTH dd, yyyy')
        else 'n/a'
        end as "Notice"
    from 
      table