【MySQL】探索 MySQL 中的 NVL:使用 IFNULL 和 COALESCE 實現


緣分讓我們相遇亂世以外
命運卻要我們危難中相愛
也許未來遙遠在光年之外
我愿守候未知里為你等待
我沒想到為了你我能瘋狂到
山崩海嘯沒有你根本不想逃
我的大腦為了你已經瘋狂到
脈搏心跳沒有你根本不重要
?????????????????????🎵 鄧紫棋《光年之外》


什么是 NVL?

NVL 是 SQL 中常用的一個函數,最早出現在 Oracle 數據庫中,用于替換 NULL 值。具體來說,NVL 函數接受兩個參數,如果第一個參數為 NULL,則返回第二個參數;否則,返回第一個參數。

MySQL 中的 NVL 替代方法

雖然 MySQL 本身并不提供 NVL 函數,但可以使用 IFNULL 或 COALESCE 函數實現相同的功能。

IFNULL:接受兩個參數,如果第一個參數為 NULL,則返回第二個參數;否則,返回第一個參數。
COALESCE:接受多個參數,返回第一個非 NULL 的參數。

使用 IFNULL 函數

基本語法
IFNULL(expr1, expr2)

expr1:要檢查的表達式。
expr2:expr1 為 NULL 時返回的值。

示例

假設我們有一個名為 employees 的表,包含以下數據:

CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),salary DECIMAL(10, 2),commission DECIMAL(10, 2)
);INSERT INTO employees (name, salary, commission) VALUES
('Alice', 5000, NULL),
('Bob', 4500, 500),
('Charlie', NULL, 1000);
使用 IFNULL 將 NULL 值替換為 0:
SELECT name, salary, IFNULL(commission, 0) AS commission
FROM employees;

輸出結果:

| name    | salary | commission |
|---------|--------|------------|
| Alice   | 5000.00| 0.00       |
| Bob     | 4500.00| 500.00     |
| Charlie | NULL   | 1000.00    |

使用 COALESCE 函數

基本語法
COALESCE(expr1, expr2, ..., expr_n)

expr1, expr2, …, expr_n:要檢查的表達式列表,返回第一個非 NULL 的表達式。

示例

同樣的 employees 表,使用 COALESCE 將 NULL 值替換為 0:

SELECT name, salary, COALESCE(commission, 0) AS commission
FROM employees;

輸出結果與 IFNULL 相同:

| name    | salary | commission |
|---------|--------|------------|
| Alice   | 5000.00| 0.00       |
| Bob     | 4500.00| 500.00     |
| Charlie | NULL   | 1000.00    |
多個參數

COALESCE 可以接受多個參數,返回第一個非 NULL 的值:

SELECT name, COALESCE(salary, commission, 0) AS compensation
FROM employees;

輸出結果:

| name    | compensation |
|---------|--------------|
| Alice   | 5000.00      |
| Bob     | 4500.00      |
| Charlie | 1000.00      |

應用場景

  1. 數據清理
    在數據清理過程中,常常需要處理 NULL 值。使用 IFNULL 或 COALESCE 可以輕松將 NULL 值替換為默認值,從而簡化數據處理流程。

  2. 報表生成
    在生成報表時,為了避免 NULL 值影響計算和展示,可以使用 IFNULL 或 COALESCE 將 NULL 值替換為有意義的默認值。

  3. 業務邏輯處理
    在業務邏輯處理中,某些字段可能會出現 NULL 值。通過使用 IFNULL 或 COALESCE,可以確保在處理這些字段時不會出現意外錯誤。

實踐示例

示例 1:計算總收入
假設我們要計算每個員工的總收入(工資 + 傭金),如果某個員工的工資或傭金為 NULL,則將其視為 0:

SELECT name, COALESCE(salary, 0) + COALESCE(commission, 0) AS total_income
FROM employees;

輸出結果:

| name    | total_income |
|---------|--------------|
| Alice   | 5000.00      |
| Bob     | 5000.00      |
| Charlie | 1000.00      |

示例 2:替換空字符串
在某些情況下,字段值可能是空字符串而不是 NULL。可以結合使用 NULLIF 和 COALESCE 來處理這種情況:

SELECT name, COALESCE(NULLIF(name, ''), 'Unknown') AS employee_name
FROM employees;

輸出結果:

| name    | employee_name |
|---------|----------------|
| Alice   | Alice          |
| Bob     | Bob            |
| Charlie | Charlie        |

結論

雖然 MySQL 中沒有直接提供 NVL 函數,但我們可以通過使用 IFNULL 和 COALESCE 實現相同的功能。它們在數據清理、報表生成和業務邏輯處理中都表現出色,提供了靈活且強大的 NULL 值處理能力。希望這篇博客能夠幫助你更好地理解和使用 MySQL 中的 IFNULL 和 COALESCE 函數,從而優化你的數據處理和查詢操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21485.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21485.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21485.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyTorch使用tensorboard的SummaryWriter報錯

PyTorch使用tensorboard可以顯示網絡運行情況,但偶爾使用SummaryWriter時遇到Segmentation fault錯誤。 利用python3的faulthandler,可定位到出錯的代碼行,具體操作有兩種方式如下: (1) 在代碼中寫入faulthandler import faulthandler # 在import之后直接添加以下啟用代碼…

探索數據結構:便捷的雙向鏈表

🔑🔑博客主頁:阿客不是客 🍓🍓系列專欄:漸入佳境之數據結構與算法 歡迎來到泊舟小課堂 😘博客制作不易歡迎各位👍點贊?收藏?關注 ?? 前言 前面我們學習了單鏈表,它解…

k8s常用命令(持續更新中)

1. 常用命令 # 查看命名空間下的所有pod kubectl get pod -n 命名空間 # 查看某命名空間下某個pod的日志 kubectl logs -f -n 命名空間 pod名# 查看某命名空間下某pod的詳細信息 kubectl describe pod pod名 -n 命名空間# 查看所有命名空間下pod kubectl pods --all-namespac…

等保測評核心對象概覽及實施要點

等保測評的對象主要包括以下幾個方面: 1. 信息系統:由計算機硬件、網絡和通信設備、計算機軟件、信息資源、信息用戶和規章制度組成的以處理信息流為目的的人機一體化系統。常見的信息系統包括辦公自動化系統(OA)、客戶關系管理系統、進銷存管理系統等。…

ICLR24大模型提示(3/11) | PromptAgent:利用語言模型進行戰略規劃,實現專家級提示優化

【摘要】高效的、針對特定任務的提示通常由專家精心設計,以整合詳細的說明和領域見解,這些見解基于對大型語言模型 (LLM) 的本能和目標任務的復雜性的深刻理解。然而,自動生成這種專家級提示仍然難以實現。現有的提示優化方法往往忽視領域知識…

20240603每日AI------------項目引入Spring Cloud Alibaba AI (二)

項目源碼解析 前端代碼&#xff1a; <div class"container"><h1>Spring Cloud Alibaba AI Example</h1><form id"form"><label for"message">User Message&#xff1a;</label><input type"text&q…

大模型PEFT(一)之推理實踐學習記錄

1. 簡介 多種模型: LLaMA、Mistral、Mixtral-MoE、Qwen、Yi、Gemmha、Baichuan、ChatGLM、Phi等等。集成方法:(增量)預訓練、指令監督微調、獎勵模型訓練、PPO訓練和DPO訓練。多種精度:32比特全參數微調、16比特凍結微調、16比特LORA微調和基于AQLM/AWQ/GPTQ/LLM.int8 的2/4/8…

一篇文章掌握Java的80%:面向對象與并發編程

Java作為一種廣泛使用的計算機編程語言&#xff0c;其強大之處在于其面向對象的特性和對并發編程的良好支持。作為一名程序員&#xff0c;我深知掌握Java的面向對象概念、集合框架、多線程與并發編程&#xff0c;以及JVM基礎對于編寫高效、可維護的代碼至關重要。本文將引導你快…

操作字符串獲取文件名字(包含類型)

記錄一種操作字符串獲取文件名字的操作方式&#xff0c;方便后期的使用。示例&#xff1a; 輸入&#xff1a;"D:/code/Test/Test.txt" 輸出&#xff1a;"Test.txt" 設計思路&#xff1a; 首先查找路徑中最后一個”/“&#xff0c;然后再通過字符串截取的…

湖南源點調研 為什么中小企業產品上市前一定要做市場調研?

本文由湖南長沙&#xff08;產品前測&#xff09;源點調研咨詢編輯發布 可能有很多企業主會表示&#xff0c;市場調研&#xff0c;產品調研&#xff0c;不都是大公司、大品牌、上市公司才會有的流程嗎&#xff0c;像我們這種小企業、小品牌、小廠家沒有必要去那么做&#xff0…

Python文本分詞工具庫-jieba

內容目錄 一、分詞二、設置分詞三、詞性信息四、關鍵詞提取 jieba庫是一個針對中文文本的分詞工具庫&#xff0c;廣泛應用于自然語言處理&#xff08;NLP&#xff09;領域的中文文本預處理階段。 主要功能: 中文分詞&#xff1a;能夠將連續的中文文本切割成有意義的詞語序列&a…

變壓器中性點接地電阻柜的出廠標準是什么

變壓器中性點接地電阻柜的出廠標準是什么&#xff1f; 現代電氣配電系統中&#xff0c;接地電阻是保障人身安全的非常重要的設施。在高壓電氣設備中&#xff0c;中性點接地電阻柜的作用是限制設備中的過電流和短路故障所產生的電流&#xff0c;以保障人身安全。變壓器中性點接…

楊輝三角形及其C語言實現

一、引言 楊輝三角形&#xff08;Pascal’s Triangle&#xff09;&#xff0c;又稱帕斯卡三角形&#xff0c;是一個在數學中經常出現的數表。它的構造規則非常簡單&#xff1a;三角形中的每個數字等于它上方兩數字之和&#xff08;或者說&#xff0c;它是位于它肩上的兩個數字…

開源VS閉源:大模型發展路徑之爭,你站哪一派?

文章目錄 引言一、數據隱私1.1開源大模型的數據隱私1.2 閉源大模型的數據隱私1.3 綜合考量 二、商業應用2.1 開源大模型的商業應用2.2 閉源大模型的商業應用2.3 商業應用的綜合考量 三、社區參與3.1 開源大模型的社區參與3.2 閉源大模型的社區參與3.3 綜合考量 結論 引言 在人…

解析“分層引流”在顱內感染治療中的價值意義

臨床中&#xff0c;化膿性顱內感染的治療一直是界內關注的重點。近年來&#xff0c;得益于醫療技術的持續革新與提升&#xff0c;顱內感染的治療方法也獲得了不斷的更新與優化。在此背景下&#xff0c;北京精誠博愛醫院所倡導的“分層引流”理念&#xff0c;作為一種新興的治療…

外貿小白到銷冠,如何30天快速提升?

外貿從業8年&#xff0c;在工廠從0-1做外貿&#xff0c;外貿的坑踩過很多&#xff0c;也做出了很多出色的業績&#xff0c;希望這篇文章可以給到外貿新人快速提升的思路。 對于剛剛進入外貿行業的職場新人&#xff1f;應該怎么做&#xff1f; 第一個月應該學什么&#xff1f;…

什么牌子的開放式耳機質量好?2024超強實力派品牌推薦!

耳機對于一個音樂人有重要這個不必多說&#xff0c;我朋友是個音樂編輯&#xff0c;他經常需要長時間佩戴耳機進行音頻編輯和混音工作。在嘗試過多款開放式耳機后&#xff0c;都沒找到合適的。今天&#xff0c;我將從專業角度為大家帶來幾款熱門開放式耳機的測評報告&#xff0…

第二證券炒股知識:股票內盤外盤代表什么意思?

股票內盤是主動性賣盤&#xff0c;表明以買入價成交的股數&#xff0c;持股的投資者主動以等于或是低于買一、買二、買三、買四、買五的價格賣出手中持有的股份&#xff0c;買入成交數量核算參加內盤。 股票外盤是主動性買盤&#xff0c;表明以賣出價成交的股數&#xff0c;場…

跟著大佬學RE(一)

學了一個 map&#xff08;&#xff09;函數的使用 import base64rawData "e3nifIH9b_CndH" target list(map(ord, rawData)) # map 函數將 rawData 中的每個字符傳遞給 ord 函數。ord 函數返回給定字符的 Unicode 碼點 print(target) # 打印 map 對象的內存地址&…

電腦中病毒了怎么辦?7招教你保護電腦安全!

“不知道怎么回事&#xff0c;我的電腦莫名其妙就中病毒了&#xff0c;實在不知道應該怎么操作了&#xff0c;希望大家可以幫我&#xff01;” 在數字化時代的浪潮中&#xff0c;電腦已成為我們生活與工作中不可或缺的一部分。然而&#xff0c;就像任何事物都有其陰暗面一樣&am…