to_date 没有返回数据
to_date is not returning data
我有一个查询,由于以下条件没有返回任何数据
where fcc_cust_addr_evnt.MIS_DATE = to_date(? , 'MM/DD/YYYY').
数据在 MIS_DATE 列的 table 中以这种 DD-MON-YYYY 格式存储。
怎样才能达到预期的效果。
在 Oracle 中,日期有时间部分。所以,有可能 MIS_DATE
有时间成分,所以 =
不起作用。
如果是这样的话,那么这样的逻辑就可以了:
where trunc(fcc_cust_addr_evnt.MIS_DATE) = to_date(? , 'MM/DD/YYYY')
trunc()
函数删除了时间部分。
使用trunc()
将阻止使用该列上的索引;如果您可能需要做很多事情,您可以添加一个基于函数的索引。但是如果有一个索引并且你想继续使用它那么你可以寻找一个范围来代替:
where fcc_cust_addr_evnt.MIS_DATE >= to_date(? , 'MM/DD/YYYY')
and fcc_cust_addr_evnt.MIS_DATE < to_date(? , 'MM/DD/YYYY') + 1
这将查找从当天午夜到次日午夜(但不包括在内)的所有时间。该模式也适用于时间戳。
如果您不想两次传递值 - 使用两个绑定占位符 - 您可以添加一个包含一个的 CTE,然后在主查询中引用来自该 CTE 的值。
如果您的应用程序中有实际日期,通常最好绑定实际日期,而不是转换为要传入的字符串,然后再转换回日期;但这取决于您的应用程序持有的数据类型。
我有一个查询,由于以下条件没有返回任何数据
where fcc_cust_addr_evnt.MIS_DATE = to_date(? , 'MM/DD/YYYY').
数据在 MIS_DATE 列的 table 中以这种 DD-MON-YYYY 格式存储。
怎样才能达到预期的效果。
在 Oracle 中,日期有时间部分。所以,有可能 MIS_DATE
有时间成分,所以 =
不起作用。
如果是这样的话,那么这样的逻辑就可以了:
where trunc(fcc_cust_addr_evnt.MIS_DATE) = to_date(? , 'MM/DD/YYYY')
trunc()
函数删除了时间部分。
使用trunc()
将阻止使用该列上的索引;如果您可能需要做很多事情,您可以添加一个基于函数的索引。但是如果有一个索引并且你想继续使用它那么你可以寻找一个范围来代替:
where fcc_cust_addr_evnt.MIS_DATE >= to_date(? , 'MM/DD/YYYY')
and fcc_cust_addr_evnt.MIS_DATE < to_date(? , 'MM/DD/YYYY') + 1
这将查找从当天午夜到次日午夜(但不包括在内)的所有时间。该模式也适用于时间戳。
如果您不想两次传递值 - 使用两个绑定占位符 - 您可以添加一个包含一个的 CTE,然后在主查询中引用来自该 CTE 的值。
如果您的应用程序中有实际日期,通常最好绑定实际日期,而不是转换为要传入的字符串,然后再转换回日期;但这取决于您的应用程序持有的数据类型。