oracle将日期比较为null

时间:2017-08-14 17:23:51

标签: sql database oracle

我有一个查询,我将一个表中的日期与另一个表中的最大日期进行比较。我遇到的问题是当日期为空时被比较。因此,请采取以下查询:

select col1 from table1 where date > (select max(date) from table b);

除了子查询返回0行之外,查询工作正常。在0行的情况下,我希望它返回所有行。换句话说,我希望将日期与日期时间最小值进行比较。因此,对于0行的情况,我想比较:

date > '01-01-1900'

我尝试过使用case case而没有运气,但我觉得我错过了一些简单的事情。

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

您想使用NVL功能来提供帮助。

\tikzstyle{block1}    = [rectangle, rounded corners,  minimum width=3cm, minimum height=1cm, text centered, draw, fill=blue!20, text width=6cm]
\tikzstyle{block2}    = [rectangle, rounded corners,  minimum width=3cm, minimum height=1cm, text centered, draw, fill=blue!20, text width=3cm]
\tikzstyle{decision}  = [diamond, minimum width=3cm, minimum height=1cm, text centered, draw, fill=blue!20, text width=2cm]
\tikzstyle{line}      = [draw, -latex']

\begin{tikzpicture}[node distance = 2cm, auto]
    % Place nodes
    \node [block1] (1) {\textbf{\small Study of basic factors}\\    \footnotesize Plant characteristics, mechanisms of nuclide production and waste streams};
    \node [block1, below of=1, node distance=1.8cm]  (2)  {\textbf{\small Development of sampling plan}};
    \node [block1, below of=2, node distance=1.7cm]  (3)  {\textbf{\small Sampling and analysis}};
    \node [block1, below of=3, node distance=2cm]  (4)  {\textbf{\small Observation and evaluation of nuclide activity database}\\  \footnotesize Selecting key nuclide and verifying correlation between DTM nuclides and KN};
    \node [decision, below of=4, node distance=3.2cm]  (5)  {\textbf{\small Applicability of SF method}};
    \node [block2, right of=5, node distance=4cm] (6)  {\textbf{\small Other methods}\\ \footnotesize Mean activity, ...};
    \node [block2, left of=5, node distance=4cm]  (7)  {\textbf{\small Applying statistics}};
    \node [block2, below of=5, node distance=3.5cm] (8) {\textbf{\small SF classifications}\\ \footnotesize Unification and classification of groups};
    \node [block2, left of=8, node distance=4cm] (9) {\textbf{\small Reference}};
    \node [block2, below of=8, node distance=2cm] (10) {\textbf{Determination of SF}};
    \node [block2, left of=10, node distance=4cm] (11) {\textbf{Applying statistics}};
    \node [block2, right of=10, node distance=4cm] (12) {\textbf{Assess KN activity}\\ Dose rate and $\gamma$-spectra};
    \node [decision, below of=10, node distance=2.5cm] (13) {\textbf{Calculation}};
    \node [block1, below of=13, node distance=2.5cm] (14) {\textbf{Determining the activity of DTM}};

    % Draw edges
    \path [line] (1) -- (2);
    \path [line] (2) -- (3);
    \path [line] (3) -- (4);
    \path [line] (4) -- (5);
    \path [line,name path=4to12] (4) -| ([xshift=1cm, yshift=0cm]6.east) |- (12);
    \path [line] (7) -- (5);
    \path [line] (5) -- (6);
    % Define the path but without drawing.
    \path [name path=6to14] (6) -| ([xshift=2cm, yshift=0cm]6.east) |-(14);
    \path [line] (5) -- (8);
    \path [line] (9) -- (8);
    \path [line] (8) -- (10);
    \path [line] (11) -- (10);
    \path [line] (10) -- (13);
    \path [line] (12) |- (13);
    \path [line] (13) -- (14);

    % Find the intersection of the two paths.
    \path [name intersections={of=4to12 and 6to14}];
    \coordinate (S)  at (intersection-1);

    % Define a circle around this intersection for the arc.
    \path[name path=circle] (S) circle(2mm);

    % Find the intersections of second line and circle.
    \path [name intersections={of=circle and 6to14}];
    \coordinate (I1)  at (intersection-1);
    \coordinate (I2)  at (intersection-2);

    % Draw normal line segments, except for portion within circle.
    \draw (6) -- (I2);
    \draw[->] (I1)  -| ([xshift=2cm, yshift=0cm]6.east) |- (14);

    % Draw arc at intersection
    \draw (I2) arc (180:0:2mm);
\end{tikzpicture}

所以对你:

(NVL(p_datefield, to_date('01/01/1901','MM/DD/YYYY'))

这个想法是01/01/1901代表select col1 from table1 where date > (select max(NVL(date, to_date('01/01/1901','MM/DD/YYYY')) from table b); 。如果您不喜欢它,请将该日期更改为您可以代表null代表{。}}的内容。

更新#1 ..来自下方的评论表明COALESCE会更好地运作。它可以......所以这就是那个例子:

null

现在你有了选择。 享受。

答案 1 :(得分:0)

当子查询没有返回任何行时,您希望发生什么?将日期与null进行比较将导致主查询不返回任何内容 - 这在技术上是正确的响应。如果您不想这样,则需要使用NVL function将字符串值替换为null。