SQL-字符串函數、數值函數、日期函數

字符串函數

1. 字符串拼接concat
-- 拼接字符串'hello'和'mysql',結果為'hellomysql'
-- 格式:concat(str1, str2, ...):拼接多個字符串
select concat('hello', 'mysql');

注意事項:若任一參數為null,結果為null(如concat('a', null)返回null)。

2. 大小寫轉換lower/upper
-- 將字符串'HElLO'轉為全小寫,結果為'hello'
select lower('HElLO');-- 將字符串'hello'轉為全大寫,結果為'HELLO'
select upper('hello');

注意事項:僅對字母有效,非字母字符不處理(如lower('123A')返回'123a')。

3. 填充函數lpad/rpad
-- 左填充:將'01'用'-'填充至長度5,結果為'---01'
-- 格式:lpad(str, length, padstr):從左側用padstr填充str至指定長度
select lpad('01', 5, '-');-- 右填充:將'02'用'*'填充至長度5,結果為'02***'
-- 格式:rpad(str, length, padstr):從右側用padstr填充str至指定長度
select rpad('02', 5, '*');

注意事項

  • 若原字符串長度大于指定length,會截斷超出部分(如lpad('12345', 3, '0')返回'123');
  • padstr可為空,但無實際意義。
4. 去除空格trim
-- 去除字符串前后的空格(默認行為),結果為'HElLO mysql *'
-- 格式:trim(str):去除str頭部和尾部的空格;也可指定去除字符(如trim('*' from '**abc**')返回'abc')
select trim(' HElLO mysql *');

注意事項:僅去除頭部和尾部的指定字符,中間的不處理(如trim(' a b c ')返回'a b c')。

5. 截取子串substring
-- 從第1個字符開始,截取7個字符,結果為'HElLO m'
-- 格式:substring(str, start, length):start為起始位置(從1開始),length為截取長度
select substring('HElLO mysql', 1, 7);

注意事項

  • 起始位置start為負數時,表示從尾部開始計算(如substring('abcde', -3, 2)返回'cd');
  • length超出字符串長度,返回從start到結尾的所有字符。

練習:表數據更新(結合字符串函數)

-- 查看emp表所有數據(用于對比更新前后的workno字段)
select * from emp;-- 更新emp表的workno字段:用lpad函數將workno左填充0至5位
-- 例如原workno為'1',更新后為'00001';原workno為'10',更新后為'00010'
update emp set workno = lpad(workno, 5, 0);

注意事項:更新操作需謹慎,建議先備份數據或用select驗證函數結果(如select lpad(workno,5,0) from emp)。

數值函數

1. 向上取整ceil
-- 向上取整:1.1的向上取整結果為2
-- 格式:ceil(x):返回大于等于x的最小整數
select ceil(1.1); -- 結果:2

注意事項:對負數同樣生效(如ceil(-1.1)返回-1)。

2. 向下取整floor
-- 向下取整:-0.5的向下取整結果為-1(取小于等于該數的最大整數)
select floor(-0.5); -- 結果:-1

注意事項:與ceil相反,floor(1.9)返回1floor(-1.1)返回-2

3. 取余數mod
-- 取余數:-9.5除以2的余數,結果為-1.5(余數符號與被除數一致)
-- 格式:mod(x, y):等價于x % y
select mod(-9.5, 2); -- 結果:-1.5

注意事項:若y為 0,返回null(除數不能為 0)。

4. 隨機數rand
-- 生成0-1之間的隨機浮點數(包含0,不包含1)
select rand(); -- 示例結果:0.847539276155328

注意事項:每次調用結果不同;若需固定隨機序列,可傳入種子(如rand(1),相同種子生成相同序列)。

5. 四舍五入round
-- 四舍五入:3.55936412保留5位小數,結果為3.55936
-- 格式:round(x, d):x為數值,d為保留的小數位數(默認d=0,即取整數)
select round(3.55936412, 5); -- 結果:3.55936

注意事項d為負數時,對整數部分四舍五入(如round(123.45, -1)返回120)。

練習:生成 6 位隨機驗證碼
-- 方式1:從rand()生成的隨機數中截取第3位開始的6個字符(rand()格式為0.xxxxxx...)
-- 例如rand()=0.123456789,substring從第3位取6位,結果為'123456'
select substring(rand(), 3, 6);-- 方式2:生成0-1000000的隨機整數,再用lpad左填充0至6位(確保是6位數)
-- round(rand()*1000000,0)生成0-1000000的整數,lpad確保不足6位時補0
select lpad(round(rand() * 1000000, 0), 6, 0);

注意事項

  • 方式 1 可能因rand()小數位數不足導致結果短于 6 位(如rand()=0.1234,結果為 '1234');
  • 方式 2 更可靠,確保始終返回 6 位數字(包括補 0 的情況)。

日期函數

1. 獲取當前日期 / 時間
-- 獲取當前日期(格式:YYYY-MM-DD)
select curdate(); -- 示例結果:2025-09-13-- 獲取當前時間(格式:HH:MM:SS)
select curtime(); -- 示例結果:15:30:45-- 獲取當前日期時間(格式:YYYY-MM-DD HH:MM:SS)
select now(); -- 示例結果:2025-09-13 15:30:45

注意事項now()返回的是 SQL 語句開始執行的時間,而非函數調用時的時間(若語句執行耗時較長)。

2. 提取日期部分
-- 提取當前日期的年份
select year(now()); -- 示例結果:2025-- 提取當前日期的月份
select month(now()); -- 示例結果:9-- 提取當前日期的日
select day(now()); -- 示例結果:13

注意事項:參數需為日期 / 時間類型,若為字符串需符合日期格式(如year('2024-05-10')返回2024)。

3. 日期加減date_add
-- 計算當前日期加79天后的日期
-- 格式:date_add(date, interval 數值 單位),單位可為day、month、year等
select date_add(now(), interval 79 day ); -- 示例結果:2025-12-01 15:30:45

注意事項

  • 單位需正確(如interval 1 month表示加 1 個月);
  • 減日期可用date_sub(如date_sub(now(), interval 1 day))。
4. 日期差datediff
-- 計算當前日期與'2024-01-01'的天數差(結果=當前日期 - 目標日期)
-- 格式:datediff(end_date, start_date):返回兩個日期之間的天數
select datediff(now(), '2024-01-01'); -- 示例結果:620(假設間隔620天)

注意事項

  • 僅計算日期部分,忽略時間(如datediff('2024-01-02 23:59', '2024-01-01 00:00')返回1);
  • end_date < start_date,結果為負數。

練習:表查詢(結合日期函數)

-- 查看emp表所有數據(用于對比)
select * from emp;-- 查詢員工的入職天數和姓名,并按入職天數倒序排序
-- datediff(curdate(), entrydate):計算當前日期與入職日期的天數差(即入職天數)
-- order by 入職天數 desc:按入職天數從大到小排序(最老員工在前)
select datediff(curdate(), entrydate) '入職天數', name from emp order by 入職天數 desc ;

注意事項

  • entrydate需為date類型,否則datediff可能返回null
  • 排序時可直接使用別名(如order by 入職天數),無需重復寫函數。

總結:函數通用注意事項

  1. 參數類型需匹配:如日期函數需傳入日期 / 時間類型,字符串函數需傳入字符串類型,否則可能返回null或錯誤;
  2. 邊界值處理:如lpad/rpad的長度小于原字符串時會截斷,substring的起始位置超出字符串長度時返回空;
  3. 性能影響:聚合函數、復雜字符串 / 日期函數在大數據量下可能影響查詢效率,建議合理使用索引或限制查詢范圍;
  4. 兼容性:部分函數(如mysql_native_password)在不同 MySQL 版本中行為可能不同,需注意版本兼容。

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

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

相關文章

JAVA高級工程師--Redis持久化詳細版

一、Redis DBRedis 數據庫的數量在單機和集群模式下有根本性的區別。1. 單機模式 (Standalone)在單機模式下&#xff0c;Redis 默認提供 16 個邏輯數據庫&#xff0c;索引編號為 0 到 15。選擇數據庫&#xff1a; 使用 SELECT <index> 命令進行切換。例如&#xff0c;SE…

hexo文章

文章目錄Tag的使用勾選框圖片的組合站內文章引用注意&#xff1a;1、關于中括號的問題目錄總結 Tag的使用 在 markdown 中加入如下的代碼來使用便簽&#xff1a; {% note success %} 文字 或者 markdown 均可 {% endnote %}或者使用 HTML 形式&#xff1a; <p class&quo…

技術面:Spring (bean的生命周期、創建方式、注入方式、作用域)

Spring Bean的生命周期是什么樣的&#xff1f; 在Spring容器里一個Bean的從創建到銷毀一般都是經歷了以下幾個階段&#xff1a; 定義階段&#xff08;Bean元信息配置&#xff09;>實例化階段&#xff08;創建Bean對象&#xff09;>初始化階段&#xff08;執行初始化邏輯&…

SpringSecurity的應用

官方文檔 一、核心能力 1.1 身份認證 (Authentication) - “你是誰&#xff1f;” 多種認證方式&#xff1a;支持幾乎所有主流認證方案&#xff0c;如表單登錄&#xff08;Username/Password&#xff09;、HTTP Basic、HTTP Digest、OAuth 2.0、OIDC (OpenID Connect)、SAML …

跨境云手機與傳統手機的不同之處

傳統手機主要滿足個人日常生活中的通訊、娛樂、辦公等基礎需求&#xff0c;比如用于日常打電話聯系親朋好友&#xff0c;閑暇時刷短視頻、玩本地安裝的游戲&#xff0c;或者簡單處理一些文檔、郵件等辦公事務。跨境云手機主要是側重于跨境業務場景&#xff0c;對于從事跨境電商…

MemGPT: Towards LLMs as Operating Systems

1 MemGPT: Towards LLMs as Operating Systems 論文地址&#xff1a;MemGPT: Towards LLMs as Operating Systems 代碼地址&#xff1a;https://github.com/letta-ai/letta 1.1 MemGPT MemGPT&#xff08;MemoryGPT&#xff09;借鑒傳統操作系統的分層內存管理思想&#xff08;…

MICAPS:氣象信息綜合分析與處理系統概述

1.概述 說明:Meteorological Information Comprehensive Analysis and Process System 中文意思:氣象信息綜合分析處理系統。它是中國氣象局開發的一套氣象數據分析、處理和可視化系統,用于氣象資料的收集、整理、分析和發布。 2.MICAPS 的用途 說明: 數據收集:接收來自…

MySQL-day2_02

MySQL-day2&#xff08;四&#xff09;排序&#xff08;五&#xff09;聚合函數一、count 總記錄數二、max 最大值三、min 最小值四、sum 求和五、avg 平均值&#xff08;六&#xff09;數據分組一、分組二、分組后的數據篩選&#xff08;七&#xff09;數據分頁顯示一、獲取部…

HarmonyOS應用開發:深入ArkUI聲明式開發范式與最佳實踐

HarmonyOS應用開發&#xff1a;深入ArkUI聲明式開發范式與最佳實踐 引言 隨著HarmonyOS 4.0的發布及API 12的推出&#xff0c;華為的分布式操作系統進入了全新的發展階段。ArkUI作為HarmonyOS應用開發的核心框架&#xff0c;其聲明式開發范式&#xff08;Declarative Paradigm&…

Claude-Flow AI協同開發:鉤子系統與 GitHub 集成

5.1 思維認知框架&#xff1a;從“開發助手”到“DevOps 智能體” 在此之前&#xff0c;我們將 Claude-Flow 視為一個強大的 “開發助手 (Development Assistant)” &#xff0c;它在編碼、測試、重構等環節為我們提供支持。現在&#xff0c;我們需要再次進行思維升級&#xff…

DigitalOcean Kubernetes 現已支持 Gateway API 托管服務

在 DigitalOcean Kubernetes 集群中管理流量&#xff0c;一直以來主要依賴 Ingress。雖然能滿足基本需求&#xff0c;但在靈活性、角色分離和高級路由方面仍存在局限。今天&#xff0c;我們很高興迎來新的改變。 我們正式宣布&#xff0c;Kubernetes Gateway API 托管服務現已…

聚銘網絡入選數世咨詢《中國數字安全價值圖譜》“日志審計”推薦企業

近日&#xff0c;國內知名數字安全咨詢機構數世咨詢正式發布《中國數字安全價值圖譜》。聚銘網絡憑借領先的技術實力與出色的市場表現&#xff0c;成功入選“日志審計”領域重點推薦企業&#xff0c;彰顯了在該賽道的專業認可與品牌影響力。關于《中國數字安全價值圖譜》 在當下…

豆包、Kimi、通義千問、DeepSeek、Gamma、墨刀 AI”六款主流大模型(或 AI 平臺)生成 PPT 的完整流程

、先厘清 3 個概念&#xff0c;少走彎路大模型 ≠ PPT 軟件豆包、Kimi、通義千問、DeepSeek 本身只負責“出大綱/出文案”&#xff0c;真正的“一鍵配圖排版”要靠官方 PPT 助手或第三方平臺&#xff08;博思 AiPPT、迅捷 AiPPT、Gamma、墨刀 AI 等&#xff09;。兩條主流技術路…

Redis哈希(Hash):適合存儲對象的數據結構,優勢與坑點解析

Redis哈希&#xff08;Hash&#xff09;&#xff1a;適合存儲對象的數據結構&#xff0c;優勢與坑點解析 1. Redis哈希概述 1.1 什么是Redis哈希 Redis哈希&#xff08;Hash&#xff09;是一種映射類型&#xff08;Map&#xff09;&#xff0c;由多個字段值對&#xff08;fi…

Python的uv包管理工具使用

一、簡介 uv是一個繼Python版本管理、Python包管理、項目管理、虛擬環境管理于一體的工具&#xff0c;由于底層是用Rust編寫的&#xff0c;uv的執行速度非常快。 安裝 pip install uv鏡像源設置 uv默認安裝包是從pypi上下載的&#xff0c;速度比較慢。我們可以設置鏡像源&#…

JavaScript事件機制與性能優化:防抖 / 節流 / 事件委托 / Passive Event Listeners 全解析

目標&#xff1a;把“為什么慢、卡頓從哪來、該怎么寫”一次說清。本文先講事件傳播與主線程瓶頸&#xff0c;再給出四件法寶&#xff08;防抖、節流、事件委托、被動監聽&#xff09;&#xff0c;最后用一套可復制的工具函數 清單收尾。1&#xff09;先理解“為什么會卡”&am…

【Chrome】chrome 調試工具的network選項卡,如何同時過濾出doc js css

通過類型按鈕快速篩選&#xff08;更直觀&#xff09;在 Network 選項卡中&#xff0c;找到頂部的 資源類型按鈕欄&#xff08;通常在過濾器搜索框下方&#xff09;。按住 Ctrl 鍵&#xff08;Windows/Linux&#xff09;或 Command 鍵&#xff08;Mac&#xff09;&#xff0c;同…

Elasticsearch (ES)相關

在ES中&#xff0c;已經有Term Index&#xff0c;那還會走倒排索引嗎 你這個問題問得很到位 &#x1f44d;。我們分清楚 Term Index 和 倒排索引 在 Elasticsearch (ES) 里的關系&#xff1a;1. 倒排索引&#xff08;Inverted Index&#xff09; 是 Lucene/ES 檢索的核心。文檔…

pre-commit run --all-files 報錯:http.client.RemoteDisconnected

報錯完整信息初步原因是這樣 報錯是 Python 的 http.client.RemoteDisconnected&#xff0c;意思是 在用 urllib 請求遠程 URL 時&#xff0c;遠程服務器直接斷開了連接&#xff0c;沒有返回任何響應。在你的堆棧里&#xff0c;它出現在 pre-commit 嘗試安裝 Golang 環境的時候…

【C++】STL·List

1. list的介紹及使用 1.1list介紹 List文檔介紹 1.2 list的使用 list中的接口比較多&#xff0c;此處類似&#xff0c;只需要掌握如何正確的使用&#xff0c;然后再去深入研究背后的原理&#xff0c;已 達到可擴展的能力。以下為list中一些常見的重要接口。 1.2.1 list的構造…