db2 获取SQL中日期列表介于两个日期列之间的所有行

wqlqzqxt  于 2022-11-07  发布在  DB2
关注(0)|答案(3)|浏览(193)

我有一个名为tableA的表,它有两个日期列。
“从表A中选择 *,其中IN_Date介于日期1和日期2之间”
IN_DATE是来自过程的输入参数
现在,我想传递一个日期列表,而不是一个日期IN_DATE,但我不确定如何更新查询。请帮助。

表格A

标识日期1日期2

gstyhher

gstyhher1#

您的问题的解决方案

select * from tableA where (
    (IN_Date between date1 and date2) or 
    (IN_Date between date3 and date4) or 
    (IN_Date between date5 and date6)
)
qq24tv8q

qq24tv8q2#

你想做的事根本不可能。
between子句的语法为:
...表达式1介于表达式2与表达式3之间...
每个表达式必须解析为单个值(而不是值列表)。此外,expression2必须〈expression3,否则结果未定义。其中expressionN是列名,则单个值是当前正在计算的行中的值。
这表明您可能没有正确处理此问题。请提供一些示例数据和预期结果。这将使您更好地了解您正在尝试做什么。描述您希望实现的目标也会有所帮助,而不是描述您如何尝试实现目标。

dgenwo3n

dgenwo3n3#

您可以使用如下所示的字符串标记化方法,其中IN_DATE字符串参数具有以YYYY-MM-DD形式的逗号分隔的日期列表。

select *
from tableA t
where exists
(
  select 1
  from xmltable 
  (
    'for $id in tokenize($s, ",") return <i>{normalize-space ($id)}</i>' 
    passing IN_DATE as "s"
    columns 
      tok char(10) path '.'
  ) v
  where date (to_date (v.tok, 'YYYY-MM-DD')) between t.date1 and t.date2
)

相关问题