Заполнение записей с использованием МЕЖДУ - PullRequest
0 голосов
/ 03 мая 2018

Дата записи имеет формат «гггг.ММ.дд» (например, 2018.05.02), и я сделал запрос, чтобы заполнить определенные записи между определенным периодом времени.

SELECT * FROM tableA WHERE (BATCHDT '2018.01.01' AND '2018.05.01');

Запрос выглядит хорошо, по крайней мере, для меня, но не работает на моем MSSQL. Пожалуйста, помогите.

Ответы [ 4 ]

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

Я бы предложил вам сохранить BATCHDT в качестве типа данных DATE, чтобы избежать путаницы со значениями времени, которые будут поставляться с DATETIME.

Кроме того, предлагаем вам использовать ISO 8601 стандарт для представления дат.

МЕЖДУ включающим оператором. Итак, ниже BETWEEN '2018-01-01' AND '2018-05-01' превратится в

BETWEEN '2018-01-01 00:00:00.000' AND '2018-05-01 00:00:00.000'

Таким образом, он не будет возвращать значения, приходящиеся на дату 2018-05-01. Таким образом, вы должны подать заявление ниже условия

BETWEEN '2018-01-01 00:00:00.000' AND '2018-05-01 23:59:59.997'

Вместо этого я бы предложил вам перейти к оператору DATE, что очень просто для BATCHDT.

BETWEEN '2018-01-01' AND '2018-05-01'
0 голосов
/ 03 мая 2018

Просто используйте стандартные форматы ANSI:

SELECT *
FROM tableA
WHERE BATCHDT BETWEEN '2018-01-01' AND '2018-05-01';

Нет необходимости в преобразовании. Я не рекомендую использовать BETWEEN с датами, потому что они могут иметь компонент времени. Более безопасный метод:

SELECT *
FROM tableA
WHERE BATCHDT >= '2018-01-01' AND
      BATCHDT < '2018-05-02';
0 голосов
/ 03 мая 2018

Возможно, вам потребуется преобразовать данные исходного поля в приемлемый формат для преобразования даты.

Если ваши исходные данные в формате «гггг.ММ.дд» (например, 2018.05.02)

затем вы можете изменить его в формат, приемлемый для преобразования даты, например, «ГГГГММДД», удалив «.» символ (поэтому ваша дата записи станет 20180502) запрос может быть следующим

SELECT * FROM tableA WHERE cast(REPLACE(BATCHDT,'.','') as date) BETWEEN '20180101' AND '20180501'

по умолчанию на сервере MSSQL также распознает формат «ГГГГММДД» для преобразования в дату, поэтому вам также не требуется сначала преобразовывать его в дату

SELECT * FROM tableA WHERE REPLACE(BATCHDT,'.','') BETWEEN '20180101' AND '20180501'
0 голосов
/ 03 мая 2018

попробуйте это.

В SQL Date type - это Date type независимо от формата. Использование его будет означать casting the field против литералов

SELECT * FROM tableA WHERE cast(BATCHDT as date) BETWEEN '2018-01-01' AND '2018-05-01'

--- 2018-jan-01  and 2018-May-01
...