Невозможность написать запрос, который получает значения между определенными датами - PullRequest
0 голосов
/ 11 мая 2019
SELECT * from my_table where product_number = '86354' and period_v in ('1/1/2019','1/31/2019');

Что я тоже пробовал:

SELECT * from my_table where product_number = '86354' and period_v between '1/1/2019' and '1/31/2019'

SELECT * from my_table where product_number = '86354' and period_v between #1/1/2019#, #1/31/2019#

SELECT * from my_table where product_number = '86354' and period_v between 1/1/2019 and  31/1/2019

мои даты в базе данных sql имеют следующий формат:

2/20/2019

месяц / день / год

1 Ответ

2 голосов
/ 11 мая 2019

Я бы порекомендовал в Oracle:

select t.*
from my_table t
where t.product_number = 86354 and 
      period_v >= date '2019-01-01' and
      period_v < date '2019-02-01';

Если вы храните строки , которые вы интерпретируете как даты, то вам следует исправить свою модель данных.Oracle - как и почти все другие базы данных - имеет тип для хранения дат, обычно называемый date.Вы можете конвертировать значения на лету:

      to_date(period_v, 'DD/MM/YYYY') >= date '2019-01-01' and
      to_date(period_v, 'DD/MM/YYYY') < date '2019-02-01';

Хотя это можно сделать, я настоятельно рекомендую использовать правильный тип данных.

В MySQL вы удалили бы ключевое слово date:

select t.*
from my_table t
where t.product_number = 86354 and 
      period_v >= '2019-01-01' and
      period_v < '2019-02-01';

Обратите внимание, что я убрал одинарные кавычки вокруг 86354.Предположительно это номер.Лучше не смешивать типы.

Кроме того, для сравнения используются >= и <.Это сделано специально Приведенный выше код работает как с датами, так и с датами времени.

...