首页 > 解决方案 > 如何根据给出的日期时间从数据库中获取数据?

问题描述

我正在尝试在两个日期之间从数据库中检索数据,这些日期作为日期时间字段而不是日期存储在数据库中。

我将输入作为字符串提供为日期,例如:20/06/2019 到 22/06/2019 然后我使用以下代码将字符串转换为日期时间:

string fromDate= "20/06/2019";
string toDate= "22/06/2019";
DateTime OfromDate = DateTime.ParseExact(fromDate, "dd/MM/yyyy", null);
DateTime OtoDate = DateTime.ParseExact(toDate, "dd/MM/yyyy", null);  

然后我通过这个查询将日期时间传递给方法,我认为问题出在哪里

     command.CommandText = string.Format("select * from tableDates where TRUNC(DATE_M) BETWEEN TO_DATE('{0}','DD-MON-RRRR') AND TO_DATE('{1}','DD-MON-RRRR')", fromDate, toDate);

注意我正在尝试检索 20/06/2019 到 22/06/2019 之间的所有数据

标签: sqlasp.netoracle

解决方案


您的日期字符串具有格式DD/MM/RRRR,并且您正在使用格式模型DD-MON-RRRR。分隔符不是问题,但 Oracle 的字符串到日期转换规则指定:

  • MM匹配MONMONTH
  • MON火柴MONTH
  • MONTH火柴MON

它没有指定这样MON匹配MM

select *
from   tableDates
where  TRUNC(DATE_M) BETWEEN TO_DATE('20/06/2019','DD-MON-RRRR')
                     AND     TO_DATE('20/06/2019','DD-MON-RRRR')

将导致:

ORA-01843: not a valid month

如果您将格式模型更改为MM

select *
from   tableDates
where  TRUNC(DATE_M) BETWEEN TO_DATE('20/06/2019','DD-MM-RRRR')
                     AND     TO_DATE('20/06/2019','DD-MM-RRRR')

将工作。

db<>在这里摆弄


推荐阅读