【问题标题】:Get all rows with a list of date between two date columns in SQL获取SQL中两个日期列之间的日期列表的所有行
【发布时间】:2022-01-04 06:06:07
【问题描述】:

我有一个名为 tableA 的表,它有两个日期列。目前,我正在使用以下查询来获取数据。

"select * from tableA where IN_Date between date1 and date2"

IN_DATE 是来自 proc 的输入参数

现在我想传递一个日期列表而不是一个日期 IN_DATE,但我不确定如何更新查询。请帮忙。

表A

id date1 date2

【问题讨论】:

  • 您想将这些日期作为逗号(或其他)分隔值的字符串传递,例如2021-01-15, 2021-01-20, ...?还是别的什么?

标签: sql db2


【解决方案1】:

您可以使用如下所示的字符串标记化方法,其中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
)

【讨论】:

    【解决方案2】:

    你想要做的事情根本不可能。

    between 子句的语法是:

    ...表达式1 在表达式2 和表达式3 之间...

    每个表达式都必须解析为一个单个值(不是值列表)。此外,表达式 2

    这表明您可能不正确地处理此问题。请提供一些示例数据和预期结果。这将使您更好地了解您正在尝试做的事情。描述您想要实现的目标也会有所帮助,而不是描述您尝试如何实现它。

    【讨论】:

      【解决方案3】:

      解决你的问题

      从表 A 中选择 * 在哪里 ( (日期 1 和日期 2 之间的 IN_Date)或 (日期 3 和日期 4 之间的 IN_Date)或 (日期 5 和日期 6 之间的 IN_Date) )

      【讨论】:

      • 列是固定的,date1 和 date2。 IN_DATE 是一个以逗号分隔的字符串形式传递的日期列表。
      • date1、date2、date3、date4、date5 和 date6 是日期值列表,而不是列。如果问题没有解决,请分享示例预期输出
      【解决方案4】:

      首先要明确一点..日期列的数据类型是什么,您使用哪种格式来存储? 您在 IN_DATE 中传递什么格式?

      【讨论】:

      • IN_Date 现在是日期,但将作为逗号分隔的日期字符串传递。 date1 和 date2 列的类型为 DATE
      猜你喜欢
      • 2017-06-12
      • 2010-10-05
      • 1970-01-01
      • 2014-06-11
      • 2018-09-17
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多