回答

收藏

Null是否大于任何日期数据类型?

技术问答 技术问答 407 人阅读 | 0 人回复 | 2023-09-14

我在DB2中有此查询
8 r4 I; u# T/ ZSELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A
/ i5 D/ i) A2 r0 O/ i如果SYSDATEis为NULL,并且@A假设@AandSOMESCHEMA.SOMETABLE.SYSDATE为 Date
4 |' u( e+ L2 o, t7 p数据类型,它将大于的任何值吗?
  M# L% h) o6 e0 B* T8 F. i# v: t! `" R请帮忙。提前致谢。, @& ~. X$ J# |  ^9 I
               
& x' m  P. _* f! ]$ D# A解决方案:
8 ]9 I1 o4 j( G' P               
* u2 K; ?) _4 C$ b% V2 t9 @3 t1 v% K$ q1 G
+ j7 n8 S  e' C
               
" k% `9 P$ m3 M  a对于比较可以包含NULL值的值有用的另一个谓词是DISTINCT谓词。如果两列均包含相等的非null值,则使用普通的相等比较(COL1 =
2 K' ^0 |8 P, x0 M* X/ l! PCOL2)比较两列将为true。如果两个列都为null,则结果将为false,因为null永远不会等于任何其他值,甚至不会等于另一个null值。使用DISTINCT谓词,将空值视为相等。因此,如果两个列都包含相等的非null值,并且两个列均为null值,则COL1与DISL不会区别。
" k" a' x) `/ s3 {$ ~* v" K: [5 ]( J- @6 |
DB2空处理1 Y4 O4 a' s0 }' {, U
这意味着所有比较操作都将为假,因为您正在将未知值与某物进行比较。因此,无论您使用哪种比较(只有IS NULL / IS NOT
- `8 c5 ~6 T. `: h, u# H+ jNULL操作都起作用!),它都是错误的。6 t$ Q- u/ G7 Y/ c
如果您希望查询正常工作,则应使用类似  k5 k% ]& \% q1 E0 a& N+ B
SELECT * - B3 Z, f- k" ^
  FROM SOMESCHEMA.SOMETABLE
  Z) Y* M8 \6 X3 P WHERE COALESCE(SYSDATE, TIMESTAMP_FORMAT('0001-01-01 23:59:59', 'YYYY-MM-DD HH24:MI:SS'))  > @A
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则