我试图在两个日期之间从数据库中检索数据,这些数据作为日期时间字段而不是日期存储在数据库中。
我将输入作为字符串提供给日期,例如: 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日之间的所有数据
答案 0 :(得分:0)
您的日期字符串的格式为DD/MM/RRRR
,而您正在使用的格式模型为DD-MON-RRRR
。分隔符不是问题,但是Oracle的String-to-Date conversion rules指定:
MM
匹配MON
或MONTH
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 <>提琴here
答案 1 :(得分:-1)
使用datediff并使用存储过程并传递参数作为日期或日期时间。 Datediff有很多选择来获取月份和年份之间的差异以及更多。