Множественное условие в предложении Where для одного столбца - PullRequest
0 голосов
/ 10 октября 2018

Как мне написать оператор MS SQL для приведенного ниже условия?

У меня есть форма, которая позволяет пользователям вводить даты (fromDate & toDate) и ID (fromID & toID) в диапазоне.Поля могут быть пустыми для всех ИЛИ вводить только из или в поле ИЛИ вводить как из, так и в поля.Выбор основан на введенных значениях для выбора.Ниже приведены условия для проверки условия ввода значения.

no value entered => skip all conditions

value entered in fromDate only => Date = frDate

value entered in toDate only => Date <= toDate

value entered in both fromDate & toDate => Date between fromDate and toDate

Condition is applied to ID field as well.

Любой совет высоко ценится.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Ниже приведен ПРИМЕР, а не точный запрос, который вы можете попытаться сформулировать, используя операторы CASE

SELECT values     
FROM Table   
WHERE CASE 
     WHEN fromDate = null & todate = null THEN 
     WHEN fromDate != null & toDate != null THEN Date between fromDate and toDate
     WHEN fromDate != null THEN  Date = frDate
     WHEN toDate != null THEN Date = toDate
0 голосов
/ 10 октября 2018

Вы можете использовать IS NULL, чтобы проверить, что параметр имеет значение

SELECT * FROM Table
    WHERE (@FromDate IS NULL OR Date > @FromDate) AND (@ToDate IS NULL OR Date < @ToDate)

Тот же тип запроса будет использоваться для идентификатора

0 голосов
/ 10 октября 2018

Вы можете решить свою проблему с помощью динамического запроса.Ваш вопрос не до конца понятен.Здесь я даю вам решение, которое поможет вам решить вашу проблему.Попробуйте это:

1.Создать динамический запрос в хранилище Процедура

        CREATE PROCEDURE sp_YourSPName
    /* Input Parameters */
        @FromDate DATETIME ,
        @ToDate DATETIME 
    AS
        SET NOCOUNT ON
        /* Variable Declaration */
        DECLARE @SQLQuery AS NVARCHAR(4000)
        DECLARE @ParamDefinition AS NVARCHAR(2000) 

        /* Build the Transact-SQL String with the input parameters */ 
        SET @SQLQuery = 'Select * From YourTableName where (1=1) ' 

        /* check for the condition and build the WHERE clause accordingly */
        IF (@FromDate IS NOT NULL)
           AND (@ToDate IS NOT NULL)
            SET @SQLQuery = @SQLQuery + 
                ' And (YourDate BETWEEN @FromDate AND @ToDate)'

        IF (@FromDate IS NULL)
           AND (@ToDate IS NOT NULL)
            SET @SQLQuery = @SQLQuery + ' And (YourDate <= @ToDate)' 

        IF (@FromDate IS NOT NULL)
           AND (@ToDate IS NULL)
            SET @SQLQuery = @SQLQuery + ' And (YourDate = @FromDate)'


        /* Specify Parameter Format for all input parameters included 
        in the stmt */
        SET @ParamDefinition = '@StartDate DateTime,
                            @EndDate DateTime'
        /* Execute the Transact-SQL String with all parameter value's  Using sp_executesql Command */

        EXECUTE sp_Executesql @SQLQuery,
             @ParamDefinition,
             @FromDate,
             @ToDate

        IF @@ERROR <> 0
            GOTO ErrorHandler

        SET NOCOUNT OFF
        RETURN(0)

        ErrorHandler :
        RETURN(@@ERROR)
    GO

2.Выполнить процедуру сохранения:

EXEC sp_YourSPName '01 Oct 2018', '01 Oct 2018'

Для получения дополнительной информации см. Эту ссылку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...