【问题标题】:Check if input date falls within table of start and end dates检查输入日期是否在开始日期和结束日期表内
【发布时间】:2019-07-11 17:04:12
【问题描述】:

我想运行查询以检查输入日期是否在表中的任何给定术语日期范围内。

学期日期示例表:

<table border="1">
<tr><th>termID</th><th>txtStartDate</th><th>txtFinishDate</th></tr>
<tr><td>37</td><td>2017-09-05 00:00:00</td><td>2017-12-15 23:59:00</td></tr>
<tr><td>38</td><td>2018-01-09 00:00:00</td><td>2018-03-29 23:59:00</td></tr>
<tr><td>39</td><td>2018-04-24 00:00:00</td><td>2018-07-06 23:59:00</td></tr>
<tr><td>40</td><td>2018-09-04 00:00:00</td><td>2018-12-14 23:59:00</td></tr>
<tr><td>41</td><td>2019-01-08 00:00:00</td><td>2019-03-29 23:59:00</td></tr>
<tr><td>42</td><td>2019-04-24 00:00:00</td><td>2019-07-05 23:59:00</td></tr></table>

给定一个日期,比如说今天的日期,它是否介于任何行的开始日期和结束日期之间。

示例代码方法

date = now()
for (row in rows):
    if date between row.txtStartDate and row.txtEndDate:
        return "yes"

我可以在给定日期的逻辑之间使用,但不确定如何将其应用于整个表格。

select case when getdate() between '2019-04-24 00:00:00' and '2019-07-05 23:59:00' then 'yes' else 'no' END 

谢谢

【问题讨论】:

  • 您提供的代码不是 T-SQL;您如何寻找解决方案?
  • 代码是我在 SQL 之外会做什么的一个例子。在 SQL 中,就像 Select case when getdate() between ...logic... then "yes" else "no"
  • 您有一个名为“日期”的列,但它似乎有一个时间组件。我很困惑。
  • 也许该列应该称为 txtStartDateTime,但我无法控制这一点。 :(

标签: sql sql-server date


【解决方案1】:

您也可以尝试使用IF EXISTS,如下所示。

If Exists (Select 1 from YourTable where GETDATE() between txtStartDate AND txtEndDate)
Begin
    --Your if logic
end
else
begin
    --Your else logic
end

【讨论】:

    【解决方案2】:

    您需要引用表格的列,而不是对值进行硬编码。您可以使用表的别名和正确的列名来执行此操作。

    DECLARE @InputDate DATE = '2019-01-05'
    
    SELECT
        T.*
    FROM
        YourTable AS T
    WHERE
        @InputDate BETWEEN T.txtStartDate AND T.txtEndDate
    

    使用WHERE 子句将过滤表中的行并仅显示条件为真的行。如果您将条件作为新列的表达式移动(在 SELECT 列列表中),那么它将显示具有此新表达式的所有行:

    DECLARE @InputDate DATE = '2019-01-05'
    
    SELECT
        T.*,
        IsInputDateBetweenDates = CASE
            WHEN @InputDate BETWEEN T.StartDate AND T.EndDate THEN 'Yes'
            ELSE 'No' END
    FROM
        YourTable AS T
    

    【讨论】:

    • 谢谢,这个方法很棒。
    【解决方案3】:

    尝试使用WHERE操作符:

    SELECT *
    FROM YourTable yt
    WHERE GETDATE() BETWEEN yt.txtStartDate AND yt.txtEndDate
    

    【讨论】:

    • 感谢这项工作。我可以在 COUNT 时在此语句中添加一个 CASE 并得到我的答案。
    • @DanWalters 很高兴为您提供帮助!:)
    猜你喜欢
    • 2018-11-20
    • 2015-05-04
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2012-08-19
    相关资源
    最近更新 更多