如何选择落在开始时间和结束时间之间的记录,其中结束时间是第二天

时间:2017-09-16 04:53:31

标签: sql sql-server tsql stored-procedures

我正在处理折扣,以便在特定时间订购时允许折扣。

一切都运转良好,但我有一个客户的奇怪要求。我的客户有午夜特价。当客户在2小时内(晚上11点至凌晨1点)下订单时,他们希望创建一个特价商品,最高可享受50%的折扣(基于$$$金额订单)。

如您所见,凌晨1点是第二天。所以,从晚上11点今天到凌晨1点

目前这是我的存储过程(它将根据总支出选择最佳折扣):

StartTime <= EndTime

只要StartTime > EndTime,一切正常。知道如何在CREATE TABLE Persons ( ID int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), Age int, PRIMARY KEY (ID) );

的第二天做 EndTime

由于

1 个答案:

答案 0 :(得分:1)

WHERE (@TotalSpend >= [MinSpend]) AND
(
    (
        /* E.g. 8pm - 10pm: */
        (
            CAST([StartTime] AS TIME)
                <
            CAST([EndTime] AS TIME)
        )
            AND
        (
            (@OrderTime >= CAST([StartTime] AS TIME))
                AND /* Note: AND */
            (@OrderTime <= CAST([EndTime] AS TIME))
        )
    )
        OR
    (
        /* E.g. 11pm - 1am: */
        (
            CAST([StartTime] AS TIME)
                >
            CAST([EndTime] AS TIME)
        )
            AND
        (
            @OrderTime >= CAST([StartTime] AS TIME)
                OR /* Note: OR */
            @OrderTime <= CAST([EndTime] AS TIME)
        )
    )
)
...