条件pl / sql输出

时间:2011-05-19 16:49:11

标签: plsql oracle10g

我需要从DB查询中获取值1或0,而后者应该执行下一步:

  • 从表中获取一些字段值
  • 将该字段值与某些文字(在查询本身中定义)进行比较
  • 如果值与文字不匹配且查询在特定时间段内执行(即从上午9:00到上午10:00),则应返回0,否则为1
  • 它包含多个结果集(行)响应(参见更多)

到目前为止,我有下一件事:

从table_name中选择instr(field,'literal'),其中trunc(time)= trunc(sysdate)

如果表 table_name 中的字段包含'literal',则返回1(where子句检查 table_name中是否截断时间 等于截断的系统时间。)

我无法得到的是我的能力:

  • 引入时间限制(基本上,如果它从上午9:00到上午10:00总是返回1)
  • 处理多个响应行,这意味着如果任何响应行将返回1,那么我只需要1行,其中包含1个值

提前致谢。

P.S。:如果有些事情含糊不清,请评论这个问题。

1 个答案:

答案 0 :(得分:3)

听起来你想要一个CASE声明。如果您发布了DDL来创建表,一些DML来填充数据,以及预期的输出,那将会很有帮助。如果查询在上午9点到10点之间运行,您似乎对要返回的内容有相互矛盾的要求。你说“如果...查询在某个时间段内执行...它应该返回0,否则为1”,但之后你会说“如果它从上午9:00到上午10:00总是返回1”。我猜你想要像

这样的东西
SELECT MAX(zero_or_one)
  FROM (
      SELECT (CASE WHEN to_char( sysdate, 'HH24' ) = '09'
                     THEN 1
                   WHEN instr( column_name, 'literal' ) > 0
                     THEN 1
                   ELSE 0
                END) zero_or_one
        FROM table_name
       WHERE trunc(date_column) = trunc(sysdate)
        )