如何根据给定的datetime从数据库中获取数据,其中仅给出日期?

时间:2019-06-26 00:21:26

标签: sql asp.net oracle

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

我将输入作为字符串提供给日期,例如: 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);

请注意我正在尝试检索2019年6月20日至2019年6月22日之间的所有数据

2 个答案:

答案 0 :(得分:0)

您的日期字符串的格式为DD/MM/RRRR,而您正在使用的格式模型为DD-MON-RRRR。分隔符不是问题,但是Oracle的String-to-Date conversion rules指定:

  
      
  • MM匹配MONMONTH
  •   
  • MON匹配MONTH
  •   
  • MONTH匹配MON
  •   

它没有指定MONMM匹配,因此:

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 <>提琴here

答案 1 :(得分:-1)

使用datediff并使用存储过程并传递参数作为日期或日期时间。 Datediff有很多选择来获取月份和年份之间的差异以及更多。