Сравнение со столбцами даты или даты и времени на сервере SQL - PullRequest
0 голосов
/ 18 апреля 2019

Мы мигрируем с Oracle на SQL Server (используя SSMA). В нашей среде Oracle мы использовали тип данных DATE для некоторых столбцов, во время сопоставления типов данных для SQL Server мы установили тип данных DATETIME для соответствующих столбцов.

Теперь предположим, что у меня есть следующая таблица:

+--------+-------------+---------------------------+
| grn_id | grn_no      | grn_dt                    |
+--------+-------------+---------------------------+
| 1      | 0000000001  | 2018-01-03 00:00:00.000   |
| 2      | 0000000002  | 2018-01-03 00:00:00.000   |
| 3      | 0000000003  | 2018-01-03 00:00:00.000   |
| 4      | 0000000001  | 2018-01-27 00:00:00.000   |
+--------+-------------+---------------------------+

Я пытаюсь отфильтровать эти данные с помощью grn_dt(DATATYPE IS DATETIME) со строкой, подобной '2018-01-27'. Как правильно это сделать?

Мы уже использовали функцию преобразования следующим образом:

SELECT * FROM grn_header WHERE convert(date,grn_dt) <= '2018-01-27'

В любом случае, мы получаем требуемый вывод, но верно ли это преобразование?

Должен ли я установить преобразование для строки ('2018-01-27') также следующим образом?

SELECT * FROM grn_header WHERE convert(date,grn_dt) <= convert(date,'2018-01-27') 

Есть ли альтернативный способ сделать это?

1 Ответ

3 голосов
/ 18 апреля 2019

Это нормально:

where convert(date, grn_dt) <= '2018-01-27'

SQL Server будет использовать индекс, если он доступен, для grn_dt, несмотря на convert().

Я также склонен написать это как:

where grn_dt < dateadd(day, 1, '2018-01-27')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...