首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Oracle 空字符串、空格與 NULL 的區別:WHERE 條件編寫避坑指南

     編輯:程式設計綜合問答

核心規則

Oracle 中 空字符串 '' 等同於 NULL,這與 SQL 標準及其他數據庫 (MySQL/PostgreSQL/SQL Server) 不同。

表達式結果說明
A = ''UNKNOWN (當作 NULL)空字符串視為 NULL
A != '' / A <> ''UNKNOWN同上,無法匹配任何行
A = ' 'TRUE/FALSE比較單個空格字符 (ASCII 32)
A IS NULLTRUE/FALSE標準 NULL 判斷
A IS NOT NULLTRUE/FALSE非空判斷

實戰案例

-- 錯誤:想查找非空字符串
SELECT * FROM t WHERE col <> '';  -- 永遠返回 0 行!

-- 正確:查找非 NULL
SELECT * FROM t WHERE col IS NOT NULL;

-- 正確:查找非空字符串且非空格 (業務常見)
SELECT * FROM t WHERE col IS NOT NULL AND col != ' ';

空值特性補充

  • NULL + 任何值 = NULL,NULL || 'abc' = NULL (Oracle 連接符)。
  • 排序時 NULLS FIRST / NULLS LAST 顯式控制。
  • 索引**不存儲**全 NULL 的行 (除非位圖索引/函數索引)。
  • NVL(col, 'default') / COALESCE(col, 'default') 處理顯示。

遷移提示

從 MySQL/SQL Server 遷移到 Oracle 時,**務必全局搜尋替換** '' 相關條件,否則業務邏輯將錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved