将日期时间转换为字符串格式,并将其传递给查询



我有一个查询,我正在以下面给定的格式传递值,它在oracle pl/sql 中工作

Select ASE_ID  
from ASE_DTLS a 
where TO_CHAR(CRT_ON,'YYYY-MM-DD') 
between '2020-09-01' and '2020-09-23'

上面的查询给出了输出。但当我试图以下面给定的格式通过c#query传递它时,它不会返回值。

Select ASE_ID  
from ASE_DTLS a 
where TO_CHAR(CRT_ON,'YYYY-MM-DD') 
between :CRT_ON and :CRT_ON";

正在从'01-09-2020 00:00:00'&'中的fieldval[0]中的post方法接收值23-09-2020 00:00:00'格式。

command.Parameters.Add(":CRT_ON", fieldval[0].From.ToString("yyyy-MM-dd"));
command.Parameters.Add(":CRT_ON", fieldval[0].To.ToString("yyyy-MM-dd"));

在通过ExecuteReader读取时获得0条记录。发件人&To如c#中所定义

public DateTime From { get; set; }
public DateTime To { get; set; }

oracle中的CRT_ ON作为日期。

.NET和Oracle中的日期都没有格式,它们是二进制值。查询应该使用与日期相关类型的参数,而不是将日期转换为字符串,只是将它们转换回日期。

代码还有其他问题——同一个参数被添加了两次,但值不同。查询本身使用BETWEEN子句中的单个参数,有效地将其转换为相等性检查。

查询应该是:

Select ASE_ID  
from ASE_DTLS a 
where CRT_ON between :CRT_FROM and :CRT_TO

参数的类型应为DateTime:

var fld=fieldval[0];
command.Parameters.Add(":CRT_FROM", OracleDbType.Date).Value = fld.From.Date;
command.Parameters.Add(":CRT_TO", OracleDbType.Date).Value = fld.To.Date;

DateTime.Date只返回DateTime值的日期部分。

如果CRT_ONdate,这将按原样工作。如果是timestamp,则查询在00:00时只返回最多为:CRT_TO的行。要返回当天的日期,查询必须更改为

Select ASE_ID  
from ASE_DTLS a 
where CRT_ON >= :CRT_FROM and CRT_ON < :CRT_TO

:CRT_TO应增加一天:

var toParam=command.Parameters.Add(":CRT_TO", SqlDbType.DateTime);
toParam.Value = fld.To.Date.AddDays(1);

您应该使用日期作为date。不要将其转换为char

Select ASE_ID  from ASE_DTLS a where trunc(CRT_ON) between to_date('2020-09-01','YYYY-MM-DD') and to_date('2020-09-23','YYYY-MM-DD')

相关内容

  • 没有找到相关文章

最新更新