无法编写查询以检索某些日期之间的值

时间:2019-05-11 19:25:14

标签: oracle toad

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 个答案:

答案 0 :(得分:2)

我会在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周围的单引号。大概是个数字。最好不要混合类型。

此外,比较使用>=<。这是有目的的上面的代码适用于日期和具有时间成分的日期。