Сравните дату, если столбцы (день, месяц и год) хранятся отдельно в SQL Server. - PullRequest
0 голосов
/ 29 мая 2018

У меня есть 3 столбца Day, Month и Year типа INT, которые полностью разделены.Мне нужно передать дату (формат: yyyy-mm-dd) в предложение WHERE, чтобы проверить, совпадает ли эта следующая дата или нет.Каков наилучший подход к решению этой проблемы?

Ответы [ 4 ]

0 голосов
/ 29 мая 2018

Я бы предложил следующее: вместо того, чтобы делать дату, используя отдельные значения, мы можем принять участие от полной даты, используя функции SQL, и сравнить с ней, что, на мой взгляд, лучший способ сравнения

DECLARE @Day INT=29, @Month INT=05, @Year INT = 2018, 
    @Date DATE = '2018-05-29'
SELECT * FROM yourTable 
WHERE YEAR(@Date) = @Year
AND MONTH(@Date) = @Month
AND DAY(@Date) = @Day
0 голосов
/ 29 мая 2018

В 2012 году это будет DateFromParts(Year,Month,Day), но вы пометили 2008, что означает, что мы должны вернуться к старым трюкам.

dateadd(mm, (@YourYearValue - 1900) * 12 + @YourMonthValue- 1 , @YourDayValue - 1)

Поместите в это ваши 3 дюйма (через столбцы из объединенияили параметры в зависимости от ситуации) и у вас есть возвращенная дата, с которой вы можете работать.

SQL Fiddle: http://www.sqlfiddle.com/#!18/9eecb/19988

0 голосов
/ 29 мая 2018

Может быть, это решение:

where cast(cast(@yyyy as varchar(4))+'-'+cast(@mm as varchar(2))+'-'+cast(@dd as 
varchar(2)) as date) ...

и замените @ yyyy, @ mm, @ dd вашими полями

0 голосов
/ 29 мая 2018

Для SQL Server 2008

    declare @Day int = 29, @Month int = 5, @Year int = 2018

    select t.*
    from [table] t
    where t.[Date] = cast(cast(@Year as char(4))+ '-' + cast(@Month as char(2)) + '-' + cast(@Day as char(2)) as date)

Только для 2012 и более поздних версий использовать DATEFROMPARTS:

where t.[Date] = DATEFROMPARTS(@Year, @Month, @Day)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...