SQL 函數概述

SQL 函數概述

SQL 函數可以分為幾大類,不同數據庫系統可能有略微不同的實現。以下是主要的 SQL 函數分類:

1. 聚合函數 (Aggregate Functions)

  • COUNT() - 計算行數

  • SUM() - 計算總和

  • AVG() - 計算平均值

  • MIN() - 找最小值

  • MAX() - 找最大值

  • GROUP_CONCAT() (MySQL) / STRING_AGG() (SQL Server, PostgreSQL) - 連接字符串

  • STDDEV() / STDDEV_POP() - 計算標準差

  • VARIANCE() / VAR_POP() - 計算方差

2. 標量函數 (Scalar Functions)

字符串函數

  • CONCAT() - 連接字符串

  • SUBSTRING() / SUBSTR() - 提取子字符串

  • TRIM() - 去除空格

  • UPPER() / UCASE() - 轉為大寫

  • LOWER() / LCASE() - 轉為小寫

  • LENGTH() / LEN() - 字符串長度

  • REPLACE() - 替換字符串

  • LEFT() / RIGHT() - 獲取左/右部分字符串

數學函數

  • ABS() - 絕對值

  • ROUND() - 四舍五入

  • CEIL() / CEILING() - 向上取整

  • FLOOR() - 向下取整

  • MOD() - 取模

  • POWER() / POW() - 冪運算

  • SQRT() - 平方根

  • RAND() - 隨機數

日期和時間函數

  • NOW() / CURRENT_TIMESTAMP - 當前日期時間

  • CURDATE() / CURRENT_DATE - 當前日期

  • CURTIME() / CURRENT_TIME - 當前時間

  • DATE() - 提取日期部分

  • TIME() - 提取時間部分

  • YEAR() / MONTH() / DAY() - 提取年/月/日

  • DATEDIFF() - 計算日期差

  • DATE_ADD() / DATE_SUB() - 日期加減

  • DAYNAME() / MONTHNAME() - 獲取星期/月份名稱

轉換函數

  • CAST() - 類型轉換

  • CONVERT() - 類型轉換

  • COALESCE() - 返回第一個非NULL值

  • NULLIF() - 兩值相等返回NULL

條件函數

  • CASE WHEN...THEN...ELSE...END - 條件表達式

  • IF() (MySQL) - 簡單條件判斷

  • IIF() (SQL Server) - 簡單條件判斷

  • DECODE() (Oracle) - 值匹配判斷

3. 窗口函數 (Window Functions)

  • ROW_NUMBER() - 行號

  • RANK() - 排名(有間隔)

  • DENSE_RANK() - 排名(無間隔)

  • NTILE() - 分組排名

  • LEAD() / LAG() - 訪問前后行數據

  • FIRST_VALUE() / LAST_VALUE() - 窗口首/尾值

  • PERCENT_RANK() - 百分比排名

  • CUME_DIST() - 累積分布

4. 系統函數

  • USER() / CURRENT_USER - 當前用戶

  • DATABASE() - 當前數據庫

  • VERSION() - 數據庫版本

  • LAST_INSERT_ID() (MySQL) - 最后插入的ID


    完整的SQL函數分類及使用示例

  • 一、聚合函數 (Aggregate Functions)

    1. COUNT()

    sql

    -- 計算所有行數
    SELECT COUNT(*) FROM products;-- 計算特定列非NULL值
    SELECT COUNT(product_name) FROM products;-- 計算不同值的數量
    SELECT COUNT(DISTINCT category_id) FROM products;

    2. SUM()

    sql

    -- 計算總和
    SELECT SUM(quantity) FROM inventory;-- 帶條件的求和
    SELECT SUM(price) FROM orders WHERE order_date > '2023-01-01';

    3. AVG()

    sql

    -- 計算平均值
    SELECT AVG(rating) FROM product_reviews;-- 結合ROUND函數
    SELECT ROUND(AVG(salary), 2) FROM employees;

    4. MIN()/MAX()

    sql

    復制

    -- 最小值和最大值
    SELECT MIN(price), MAX(price) FROM products;-- 日期最值
    SELECT MIN(hire_date), MAX(hire_date) FROM employees;

    5. GROUP_CONCAT()/STRING_AGG()

    sql

    -- MySQL
    SELECT department_id, GROUP_CONCAT(employee_name SEPARATOR '; ') 
    FROM employees GROUP BY department_id;-- SQL Server/PostgreSQL
    SELECT department_id, STRING_AGG(employee_name, '; ') 
    FROM employees GROUP BY department_id;

    6. STDDEV()/VARIANCE()

    sql

    -- 標準差和方差
    SELECT STDDEV(salary), VARIANCE(salary) FROM employees;

    二、標量函數 (Scalar Functions)

    字符串函數

    1. CONCAT()

    sql

    SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM customers;
    2. SUBSTRING()/SUBSTR()

    sql

    SELECT SUBSTRING('Database', 1, 4); -- 返回'Data'
    SELECT SUBSTR(email, 1, POSITION('@' IN email)-1) AS username FROM users;
    3. TRIM()

    sql

    SELECT TRIM('   SQL   '); -- 返回'SQL'
    SELECT TRIM(BOTH 'x' FROM 'xxSQLxx'); -- 返回'SQL'
    4. UPPER()/LOWER()

    sql

    SELECT UPPER('Hello'); -- 'HELLO'
    SELECT LOWER('SQL');   -- 'sql'
    5. LENGTH()/LEN()

    sql

    -- MySQL/PostgreSQL
    SELECT LENGTH('SQL'); -- 3-- SQL Server
    SELECT LEN('SQL');    -- 3
    6. REPLACE()

    sql

    SELECT REPLACE('Hello World', 'World', 'SQL'); -- 'Hello SQL'
    7. LEFT()/RIGHT()

    sql

    SELECT LEFT('Database', 4); -- 'Data'
    SELECT RIGHT('Database', 3); -- 'ase'

    數學函數

    1. ABS()

    sql

    SELECT ABS(-15); -- 15
    2. ROUND()

    sql

    SELECT ROUND(123.4567, 2); -- 123.46
    3. CEIL()/CEILING()/FLOOR()

    sql

    SELECT CEIL(123.45);  -- 124
    SELECT FLOOR(123.45); -- 123
    4. MOD()

    sql

    SELECT MOD(10, 3); -- 1 (10除以3的余數)
    5. POWER()/POW()

    sql

    SELECT POWER(2, 3); -- 8 (2的3次方)
    6. SQRT()

    sql

    SELECT SQRT(25); -- 5
    7. RAND()

    sql

    -- 生成0-1之間的隨機數
    SELECT RAND();-- 生成1-100的隨機整數(MySQL)
    SELECT FLOOR(1 + RAND() * 100);

    日期和時間函數

    1. NOW()/CURRENT_TIMESTAMP

    sql

    SELECT NOW(); -- 返回當前日期時間 '2023-10-25 15:30:45'
    2. CURDATE()/CURRENT_DATE

    sql

    SELECT CURDATE(); -- '2023-10-25'
    3. CURTIME()/CURRENT_TIME

    sql

    SELECT CURTIME(); -- '15:30:45'
    4. DATE()/TIME()

    sql

    SELECT DATE('2023-10-25 15:30:45'); -- '2023-10-25'
    SELECT TIME('2023-10-25 15:30:45'); -- '15:30:45'
    5. YEAR()/MONTH()/DAY()

    sql

    SELECT YEAR('2023-10-25'); -- 2023
    SELECT MONTH('2023-10-25'); -- 10
    SELECT DAY('2023-10-25'); -- 25
    6. DATEDIFF()

    sql

    -- MySQL
    SELECT DATEDIFF('2023-12-31', '2023-10-25'); -- 67-- SQL Server
    SELECT DATEDIFF(day, '2023-10-25', '2023-12-31');
    7. DATE_ADD()/DATE_SUB()

    sql

    -- MySQL
    SELECT DATE_ADD('2023-10-25', INTERVAL 7 DAY); -- '2023-11-01'-- SQL Server
    SELECT DATEADD(day, 7, '2023-10-25');
    8. DAYNAME()/MONTHNAME()

    sql

    SELECT DAYNAME('2023-10-25'); -- 'Wednesday'
    SELECT MONTHNAME('2023-10-25'); -- 'October'

    轉換函數

    1. CAST()/CONVERT()

    sql

    SELECT CAST('123' AS SIGNED); -- 字符串轉整數
    SELECT CONVERT('2023-10-25', DATE); -- 字符串轉日期
    2. COALESCE()

    sql

    SELECT COALESCE(NULL, NULL, 'SQL', NULL, 'Example'); -- 'SQL'
    3. NULLIF()

    sql

    SELECT NULLIF(10, 10); -- NULL
    SELECT NULLIF(10, 20); -- 10

    條件函數

    1. CASE WHEN

    sql

    SELECT product_id,price,CASE WHEN price > 100 THEN 'Expensive'WHEN price > 50 THEN 'Moderate'ELSE 'Cheap'END AS price_category
    FROM products;
    2. IF() (MySQL)

    sql

    SELECT IF(1 > 0, 'True', 'False'); -- 'True'
    3. IIF() (SQL Server)

    sql

    SELECT IIF(1 > 0, 'True', 'False'); -- 'True'
    4. DECODE() (Oracle)

    sql

    SELECT DECODE(status, 1, 'Active', 0, 'Inactive', 'Unknown') FROM users;

    三、窗口函數 (Window Functions)

    1. ROW_NUMBER()

    sql

    SELECT employee_id,salary,ROW_NUMBER() OVER (ORDER BY salary DESC) AS rank
    FROM employees;

    2. RANK()/DENSE_RANK()

    sql

    SELECT product_id,sales,RANK() OVER (ORDER BY sales DESC) AS rank,DENSE_RANK() OVER (ORDER BY sales DESC) AS dense_rank
    FROM products;

    3. NTILE()

    sql

    SELECT customer_id,total_purchases,NTILE(4) OVER (ORDER BY total_purchases DESC) AS quartile
    FROM customers;

    4. LEAD()/LAG()

    sql

    SELECT date,revenue,LAG(revenue, 1) OVER (ORDER BY date) AS prev_day_revenue,LEAD(revenue, 1) OVER (ORDER BY date) AS next_day_revenue
    FROM daily_sales;

    5. FIRST_VALUE()/LAST_VALUE()

    sql

    SELECT department_id,employee_id,salary,FIRST_VALUE(employee_id) OVER (PARTITION BY department_id ORDER BY salary DESC) AS highest_paid
    FROM employees;

    6. PERCENT_RANK()/CUME_DIST()

    sql

    SELECT student_id,score,PERCENT_RANK() OVER (ORDER BY score) AS percentile,CUME_DIST() OVER (ORDER BY score) AS cumulative_dist
    FROM exam_results;

    四、系統函數

    1. USER()/CURRENT_USER

    sql

    SELECT USER(); -- 'root@localhost'

    2. DATABASE()

    sql

    SELECT DATABASE(); -- 返回當前數據庫名

    3. VERSION()

    sql

    SELECT VERSION(); -- '8.0.26'

    4. LAST_INSERT_ID() (MySQL)

    sql

    -- 獲取最后插入的自動增量ID
    SELECT LAST_INSERT_ID();

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

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

相關文章

MySQL學習筆記九

第十一章使用數據處理函數 11.1函數 SQL支持函數來處理數據但是函數的可移植性沒有SQL強。 11.2使用函數 11.2.1文本處理函數 輸入: SELECT vend_name,UPPER(vend_name) AS vend_name_upcase FROM vendors ORDER BY vend_name; 輸出: 說明&#…

認識vue中的install和使用場景

寫在前面 install 在實際開發中如果你只是一個簡單的業務實現者,那么大部分時間你是用不到install的,因為你用到的基本上都是別人封裝好的插件、組件、方法、指令等等,但是如果你需要給公司的架構做建設,install就是你避不開的一個…

【SpringCloud】構建分布式系統的利器

一、引言 在當今數字化時代,隨著業務規模的不斷擴大和用戶量的急劇增長,單體應用逐漸暴露出諸多局限性,如可擴展性差、維護困難等。分布式系統應運而生,而 Spring Cloud 則成為了構建分布式系統的熱門框架之一。它提供了一系列豐…

mkdir通配符詳解

在 mkdir 命令中使用通配符可以簡化批量創建目錄的操作。通配符如 {} 和 * 可以用來生成多個目錄名稱,從而減少重復輸入。以下是一些常見的使用方法和示例。 使用 {} 通配符 {} 通配符可以用來生成一系列的目錄名稱,語法如下: mkdir dir_{…

Transformer的Word Embedding

一、Transformer 中的詞嵌入是什么? 1. 定義與作用 ? 詞嵌入(Word Embedding):將離散的詞語映射為低維連續向量,捕捉語義和語法信息。 ? 在 Transformer 中的位置: ? 輸入層:每個詞通過嵌入…

Linux 進程間通信:信號機制

Linux 進程間通信:信號機制 在多進程操作系統中,進程之間的通信至關重要,尤其是在Linux系統中,信號(Signal)作為一種特殊的進程間通信方式,廣泛用于進程之間的協調和控制。信號可以看作是操作系…

基于TRIZ創新方法論的九屏法分析系統

1. 文件頭與庫導入 # -*- coding: utf-8 -*- import streamlit as st import pandas as pd import numpy as np import plotly.graph_objects as go from datetime import datetime from sklearn.ensemble import RandomForestRegressor ??作用??:設置文件編碼…

【LangChain框架組成】 LangChain 技術棧的模塊化架構解析

目錄 整體架構概述 整體架構層級劃分 模塊詳細解析 1. 部署與服務層(LangServe & Deployments) 2. 應用模板層(Templates & Committee Architectures) 3. 核心功能層(LangChain) 4. 社區擴展…

自定義數據結構的QVariant序列化 ASSERT failure in QVariant::save: “invalid type to save“

自定義數據結構放入QVariant,在序列化時拋出異常 ASSERT failure in QVariant::save: “invalid type to save” 自定義數據結構如struct MyData,除了要在結構體后面加 struct MyData { ... } Q_DECLARE_METATYPE(MyData)如果需要用到流的輸入輸出&…

vxe-table 啟用 checkbox-config.reserve 實現分頁復選框選擇功能、獲取已選數據的用法

vxe-table 啟用 checkbox-config.reserve 實現分頁復選框選擇功能、獲取已選數據的用法 查看官網:https://vxetable.cn gitbub:https://github.com/x-extends/vxe-table gitee:https://gitee.com/x-extends/vxe-table 效果 代碼 獲取已選擇…

藍橋杯-門牌制作

題目描述 本題為填空題,只需要算出結果后,在代碼中使用輸出語句將所填結果輸出即可。 小藍要為一條街的住戶制作門牌號。 這條街一共有 20202020 位住戶,門牌號從 11 到 20202020 編號。 小藍制作門牌的方法是先制作 00 到 99 這幾個數字…

C#調用Lua方法1+C#調用Lua方法2,3

xLua中Lua調用C#代碼 原因:C#實現的系統,因為Lua可以調用,所以完全可以換成Lua實現,因為Lua可以即時更改,即時運行,所以游戲的代碼邏輯就可以隨時更改。 實現和C#相同效果的系統,如何實現&#…

macOS Chrome - 打開開發者工具,設置 Local storage

文章目錄 macOS Chrome - 打開開發者工具設置 Local storage macOS Chrome - 打開開發者工具 方式2:右鍵點擊網頁,選擇 檢查 設置 Local storage 選擇要設置的 url,顯示右側面板 雙擊面板,輸入要添加的內容 2025-04-08&#xff…

zustand 源碼解析

文章目錄 實現原理createcreateStore 創建實例CreateStoreImpl 實現發布訂閱createImpl 包裝返回給用戶調用的 hookuseSyncExternalStoreWithSelector 訂閱更新zustand 性能優化自定義數據更新createWithEqualityFncreateWithEqualityFnImpl 返回 hookuseSyncExternalStoreWith…

kotlin,Android,jetpack compose,日期時間設置

AI生成,調試出來學習,這些小組件會用了,就可以組合一個大點的程序了。 package com.example.mydatetimeimport android.app.AlertDialog import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.co…

構建k8s下Helm私有倉庫與自定義Chart開發指南

#作者:程宏斌 文章目錄 自定義helm模板1、開發自己的chare包2、調試chart3、安裝chart 自定義helm模板 https://hub.helm.sh/ 1、開發自己的chare包 [rootmaster ~]# helm create mychare //創建一個名為mychare的chare包 [rootmaster ~]# tree -C mychare/ //以…

MOP數據庫中的EXPLAIN用法

EXPLAIN 是 SQL 中的一個非常有用的工具,主要用于分析查詢語句的執行計劃。執行計劃能展示數據庫在執行查詢時的具體操作步驟,像表的讀取順序、使用的索引情況、數據的訪問方式等,這有助于我們對查詢性能進行優化。 語法 不同的數據庫系統&…

項目范圍蔓延的十大誘因及應對策略

項目范圍蔓延的十大誘因及應對策略是什么?主要在于: 缺乏清晰目標、利益相關方過多、需求變更未及時管控、缺少優先級體系、溝通鏈條冗長、管理層干預頻繁、資源與預算不匹配、技術風險被低估、合同或協議不完善、缺乏階段性驗收與復盤。其中缺乏清晰目標…

做好一個測試開發工程師第二階段:java入門:idea新建一個project后默認生成的.idea/src/out文件文件夾代表什么意思?

時間:2025.4.8 一、前言 關于Java與idea工具安裝不再展開,網上很多教程,可以自己去看 二、project建立后默認各文件夾代表意思 1、首先new---->project后會得到文件如圖 其中: .idea文件代表:存儲這個項目的歷史…

算法進階指南 分形

問題描述 分形,具有以非整數維形式充填空間的形態特征。通常被定義為: “一個粗糙或零碎的幾何形狀,可以分成數個部分,且每一部分都(至少近似地)是整體縮小后的形狀”,即具有自相似的性質。 現…