我希望查询datetime列不为null和null值。 但我查询现在没有空值。我想查询两个值。
查询:
select l.com_code,
l.p_code,
to_char(l.effdate,'dd/mm/yyyy') effdate,to_char(l.expdate,'dd/mm/yyyy') expdate
from RATE_BILL l
where ( to_date('02/06/2016','dd/mm/yyyy') <= to_date(l.effdate,'dd/mm/yyyy')
or to_date('02/06/2016','dd/mm/yyyy') <= to_date(l.expdate,'dd/mm/yyyy') )
数据样本
com_code | p_code | effdate | expdate
A | TEST01 | 01/01/2016 | 31/05/2016
A | Test01 | 01/06/2016 |
查询结果:
com_code | p_code | effdate | expdate
A | TEST01 | 01/01/2016 | 31/05/2016
A | Test01 | 01/06/2016 |
列expdate 如果null =&#39; 31/12 / 9998&#39;但在DB中显示为null 当查询datetime =&#39; 02/06 / 2016&#39;介于两者之间应该导致这个
com_code | p_code | effdate | expdate
A | Test01 | 01/06/2016 |
但查询
where ( to_date('31/05/2016','dd/mm/yyyy') <= to_date(l.effdate,'dd/mm/yyyy') or to_date('31/05/2016','dd/mm/yyyy') <= to_date(l.expdate,'dd/mm/yyyy') )
结果
A | TEST01 | 01/01/2016 | 31/05/2016
A | Test01 | 01/06/2016 |
值Datetime是&#34; Now Datetime&#34;
答案 0 :(得分:0)
我不明白你的问题的细节,但我认为你在比较空值方面遇到了问题。
通过比较忽略空值。要选择这些列,您应该明确检查reflect
e.g。
l.effdate is null
答案 1 :(得分:0)
首先,我必须承认,我不确定从你的措辞[没有违法行为]中理解你的文字的含义。如果此答案无法满足您的需求,请随时发表评论。
查询的where条件建立在表/视图的列及其sql数据类型上。无需将datetime列转换为datetime数据类型。
此外,它在这里可能有害,因为它意味着隐式转换:
CREATE TABLE [dbo].[Sales] (
[Id] VARCHAR (150) NOT NULL,
...
[ImportHistoryId] INT NOT NULL,
...
CONSTRAINT [FK_Sales_ImportHistory] FOREIGN KEY ([ImportHistoryId]) REFERENCES [dbo].[ImportHistory] ([Id])
);
因此将where条件更改为:
date column
-> char /* implicit, default format */
-> date /* express format;
in general will differ from the format the argument
string follows
*/
为了满足空值,使用足够大的&#39;补充where条件。要在db列中显示空值的情况下进行比较的日期时间:
where to_date('02/06/2016','dd/mm/yyyy') <= l.effdate
or to_date('02/06/2016','dd/mm/yyyy') <= l.expdate
您可以自由使用不同的截止日期。例如,您可能希望在where to_date('02/06/2016','dd/mm/yyyy') <= nvl(l.effdate, to_date('12/31/9998','dd/mm/yyyy'))
or to_date('02/06/2016','dd/mm/yyyy') <= nvl(l.expdate, to_date('12/31/9998','dd/mm/yyyy'))
不为空时使用expdate
,否则使用当前日期时间:
rate_bill