gpt4 book ai didi

SQL 日期选择为 NULL、之后、之前、之间

转载 作者:行者123 更新时间:2023-12-05 00:35:47 24 4
gpt4 key购买 nike

要求:按日期选择之后、之前、之间或全部(如果为空)

我正在使用 SQL Server 2008

这是我的尝试,但我遇到了在案例之外有效使用的代码的语法错误。

  • 有没有更好的方法?
  • 使用 case 什么是正确的语法?
    declare @StartDate datetime;    
    declare @EndDate datetime;
    SET @EndDate = GETDATE();
    SET @StartDate = DATEADD(year, -2, GETDATE());

    select *
    from ArCustomer
    where CAST(Customer as int) > 1000
    AND
    CASE WHEN @StartDate IS NOT NULL AND @EndDate IS NOT NULL THEN
    ArCustomer.DateLastSale BETWEEN @StartDate AND @EndDate
    WHEN @StartDate IS NULL AND @EndDate IS NOT NULL THEN
    ArCustomer.DateLastSale < @EndDate
    WHEN @StartDate IS NOT NULL AND @EndDate IS NULL THEN
    ArCustomer.DateLastSale > @StartDate
    END;
  • 最佳答案

    或者,如果日期参数是 NULL,则您无法通过日期参数进行限制。 :

    SELECT *
    FROM ArCustomer ac
    WHERE
    CAST(ac.Customer as int) > 1000
    AND (ac.DateLastSale >= @StartDate OR @StartDate IS NULL)
    AND (ac.DateLastSale <= @EndDate OR @EndDate IS NULL)

    或者...您可以处理 NULL将其视为低端或高端日期:
    SELECT *
    FROM ArCustomer ac
    WHERE
    CAST(ac.Customer as int) > 1000
    AND ac.DateLastSale BETWEEN ISNULL(@StartDate, '1900-01-01')
    AND ISNULL(@EndDate, '9999-12-31')

    编辑:

    这两种方法之间的执行计划可能有所不同,因此您可以尝试两种方法,看看一种方法是否优于另一种方法......

    关于SQL 日期选择为 NULL、之后、之前、之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8990239/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com