IF ODR_KOJI_TBL.DATE_URIAGE <> Null の場合
開始年月日 ≦ ODR_KOJI_TBL.DATE_URIAGE and
終了年月日 ≧ ODR_KOJI_TBL.DATE_URIAGE
ELSE
IF ODR_KOJI_TBL.DATE_JUCHU <> Null の場合
開始年月日 ≦ ODR_KOJI_TBL.DATE_JUCHU and
終了年月日 ≧ ODR_KOJI_TBL.DATE_JUCHU
ELSE
IF ODR_KOJI_TBL.DATE_MITUMORI <> Null の場合
開始年月日 ≦ ODR_KOJI_TBL.DATE_MITUMORI and
終了年月日 ≧ ODR_KOJI_TBL.DATE_MITUMORI
ELSE
IF ODR_KOJI_TBL.DATE_MITUMORI_NOKI <> Null の場合
開始年月日 ≦ ODR_KOJI_TBL.DATE_MITUMORI_NOKI and
終了年月日 ≧ ODR_KOJI_TBL.DATE_MITUMORI_NOKI
END-IF
END-IF
END-IF
END-IF
開始年月日 ≦ ODR_KOJI_TBL.DATE_URIAGE and
終了年月日 ≧ ODR_KOJI_TBL.DATE_URIAGE
ELSE
IF ODR_KOJI_TBL.DATE_JUCHU <> Null の場合
開始年月日 ≦ ODR_KOJI_TBL.DATE_JUCHU and
終了年月日 ≧ ODR_KOJI_TBL.DATE_JUCHU
ELSE
IF ODR_KOJI_TBL.DATE_MITUMORI <> Null の場合
開始年月日 ≦ ODR_KOJI_TBL.DATE_MITUMORI and
終了年月日 ≧ ODR_KOJI_TBL.DATE_MITUMORI
ELSE
IF ODR_KOJI_TBL.DATE_MITUMORI_NOKI <> Null の場合
開始年月日 ≦ ODR_KOJI_TBL.DATE_MITUMORI_NOKI and
終了年月日 ≧ ODR_KOJI_TBL.DATE_MITUMORI_NOKI
END-IF
END-IF
END-IF
END-IF
解决方案 »
- Oracle数据文件复用问题
- oracle shutdown 报错
- 理论上,一个数据库是否可以无限大?
- ora-01008 并非所有变量都已关联的错误,是什么原因呀?
- 关于飞机订票系统的一个数据库表
- oracle中truncate和delete命令有何区别?
- ORACLE有没有象SQLSERVER样的查询分析器及数据备份和表导出的功能
- Oracle新手,请多多指教: 这个存储过程怎么写:返回一个数值(select f1 from t1 where theID = value_ID)???
- Oracle如何一个数据连接对应多个事务
- 重金求一段SQL,工作难题﹐急﹗
- 关于视图的问题
- 多表更新的语句优化
小日本的字看不懂,≧这些也是sql?
if ODR_KOJI_TBL.DATE_URIAGE is not Null then
swhere:='開始年月日 ≦ ODR_KOJI_TBL.DATE_URIAGE and 終了年月日 ≧ ODR_KOJI_TBL.DATE_URIAGE ';
elsif ODR_KOJI_TBL.DATE_JUCHU is not Null then
swhere:='開始年月日 ≦ ODR_KOJI_TBL.DATE_JUCHU and 終了年月日 ≧ ODR_KOJI_TBL.DATE_JUCHU ';
elsif ODR_KOJI_TBL.DATE_MITUMORI is not Null then
swhere:='開始年月日 ≦ ODR_KOJI_TBL.DATE_MITUMORI and 終了年月日 ≧ ODR_KOJI_TBL.DATE_MITUMORI ';
elsif ODR_KOJI_TBL.DATE_MITUMORI_NOKI is not Null then
swhere:='開始年月日 ≦ ODR_KOJI_TBL.DATE_MITUMORI_NOKI and 終了年月日 ≧ ODR_KOJI_TBL.DATE_MITUMORI_NOKI ';
end if;
按照你写的逻辑,非空就换值可以不这样写,直接写在where条件中開始年月日 ≦
nvl(ODR_KOJI_TBL.DATE_URIAGE,
nvl(ODR_KOJI_TBL.DATE_JUCHU,
nvl(ODR_KOJI_TBL.DATE_MITUMORI,
nvl(ODR_KOJI_TBL.DATE_MITUMORI_NOKI,'') --都不符合条件你取的值
)
)
)
and 終了年月日 ≧
nvl(ODR_KOJI_TBL.DATE_URIAGE,
nvl(ODR_KOJI_TBL.DATE_JUCHU,
nvl(ODR_KOJI_TBL.DATE_MITUMORI,
nvl(ODR_KOJI_TBL.DATE_MITUMORI_NOKI,'') --都不符合条件你取的值
)
)
)
开始年月日 >= nvl2(ODR_KOJI_TBL.DATE_URIAGE, ODR_KOJI_TBL.DATE_JUCHU, ODR_KOJI_TBL.DATE_MITUMORI_NOKI)
and
终止年月日 <= nvl2(ODR_KOJI_TBL.DATE_URIAGE, ODR_KOJI_TBL.DATE_JUCHU, ODR_KOJI_TBL.DATE_MITUMORI_NOKI)
between 终止年月日 and 开始年月日
elsif then
end if
其具体的语法格式如下:
DECODE(input_value,value,result[,value,result…][,default_result]);
其中:
input_value 试图处理的数值。DECODE函数将该数值与一系列的序偶相比较,以决定最后的返回结果
value 是一组成序偶的数值。如果输入数值与之匹配成功,则相应的结果将被返回。
对应一个空的返回值,可 以使用关键字NULL于之对应
result 是一组成序偶的结果值
default_result 未能与任何一序偶匹配成功时,函数返回的默认值 下面的例子说明了,如何读取用户CHECKUP表SEAPARK中的BLOOD_TEST_FLAG列下的项目,作为DECODE函数的实参支持值。
SELECT checkup_type, DECODE(blood_test_flag, 'Y','Yes', 'N','No', NULL,'None', 'Invalid')
FROM checkup;
这个SQL语句展示了DECODE函数的左右基础功能特征。函数的输入值时BLOOD_TEST_FLAG列的数据,如果该列的值是'Y',那么函数返回'YES;如果该列的值是NULL,那么函数返回'None';如果没有与任何一个序偶匹配成功,则表示该列当前值无效,函数返回'Invali'。