Как мне отформатировать дату в предложении SQL Where? - PullRequest
2 голосов
/ 05 мая 2011

У меня есть приложение .NET 2010, которое работает с БД SQL. На стороне приложения пользователь может выполнять поиск по дате начала и дате окончания. Бот из них только месяц + год. Затем я форматирую их, чтобы они были полными датами. Поэтому, когда они перейдут в сохраненный процесс, они будут выглядеть следующим образом ...

Дата начала: 01.01.2011 Дата окончания: 5/31/2011

Но дата в БД разбита на 3 поля типа int, Месяц, День и Год, ... из которых День может или не может быть заполнен (0, если нет). Было бы хорошо, чтобы это всегда по умолчанию равнялось одному при выполнении этого запроса. Поэтому, если значения в БД были Месяц = ​​3, День = 0 Год = 2011, я бы хотел, чтобы оператор sql отображался как

Где СДЕЛАНО ДАТА между '01.01.2011' и '5/31/2011'

Я просто не могу понять, как форматировать поля sql в предложении where.

Ответы [ 3 ]

0 голосов
/ 05 мая 2011

Вы пробовали что-то вроде

WHERE CONVERT(DATETIME, 
    CONVERT(VARCHAR(4), [c_year]) + '/' 
    + CONVERT(VARCHAR(2), [c_month]) + '/' 
    + CONVERT(VARCHAR(2), [c_day])) 
BETWEEN '2011/1/1' AND '2011/5/31'

Надеюсь, это поможет

0 голосов
/ 06 мая 2011
WHERE CAST(Year AS varchar) + RIGHT(100 + Month, 2) +
      RIGHT(100 + COALESCE(NULLIF(Day, 0), 1), 2) BETWEEN ...
0 голосов
/ 05 мая 2011

вы можете построить дату, используя функции datadd в предложении WHERE EG.

SELECT ...
WHERE DATEADD(Day, field_days-1, DATEADD(Month, field_months-1, DATEADD(Year, field_years-1900, 0))) BETWEEN '1/1/2011' AND '5/31/2011'

Просто замените field_days, field_months, field_years полями int в таблице для дней, месяцев и года. Это вернет все записи в диапазоне дат.

Это то, что вам нужно?

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