讀SQL學習指南(第3版)筆記11_字元串函數和數值函數

来源:https://www.cnblogs.com/lying7/archive/2023/09/05/17677518.html
-Advertisement-
Play Games

![](https://img2023.cnblogs.com/blog/3076680/202309/3076680-20230904164459431-1322523641.png) # 1. 儘管SQL標準指定了部分函數,但資料庫廠商並沒有遵循這些函數規範 # 2. 字元串 ## 2.1. c ...


1. 儘管SQL標準指定了部分函數,但資料庫廠商並沒有遵循這些函數規範

2. 字元串

2.1. char

2.1.1. 固定長度、不足部分用空格填充的字元串

2.1.2. MySQL允許的char類型的最大長度為255個字元

2.1.3. Oracle Database允許的最大長度為2,000個字元

2.1.4. SQL Server允許的最大長度為8,000個字元

2.2. varchar

2.2.1. 變長字元串

2.2.2. MySQL允許的varchar類型的最大長度為65,536個字元

2.2.3. Oracle Database(通過varchar2類型)允許的最大長度為4,000個字元

2.2.4. SQL Server允許的最大長度為8,000個字元

2.3. text

2.3.1. MySQL和SQL Server

2.4. clob

2.4.1. Oracle Database

2.5. 保存非常大的可變長字元串

2.5.1. 文檔

2.5.2. MySQL有多種text類型(tinytext、text、mediumtext和longtext),可用於最大4GB的文檔

2.5.3. SQL Server為最大2GB的文檔提供了單一的text類型

2.5.3.1. SQL Server 2005還包括varchar(max)數據類型,並建議使用其代替text類型,text類型將在未來的某個版本中被刪除

2.5.4. Oracle Database包括clob數據類型,可保存最大為128TB的巨大文檔

2.6. 可以配置MySQL和SQL Server以實現悄無聲息地截斷字元串,而不是拋出異常

2.7. 從MySQL 6.0版開始,預設行為是“strict”模式,意味著在發生問題時拋出異常,而在早先版本的伺服器中,字元串會被截斷,併發出警告,如果希望資料庫引擎採取這種方式,可以選擇ANSI模式

2.8. 避免字元串被截斷(或是在Oracle Database和MySQL的strict模式下拋出異常)的最好方法是將列長度的上限設置得足夠大,以容納可能存儲在其中的最長的字元串(伺服器只會分配足以存儲字元串的空間,所以為varchar列設置長度更大的上限並不會浪費存儲資源

2.9. 包含單引號

2.9.1. 需要在字元串中添加轉義字元,以便伺服器將字元串中的撇號視為普通字元

2.9.2. 直接在單引號前再添加一個單引號進行轉義

2.9.3. mysql

 -> UPDATE string_tbl
    -> SET text_fld = 'This string didn''t work, but it does now';

2.9.4. Oracle Database和MySQL用戶也可以選擇使用反斜杠字元來轉義單引號

2.9.5. sql

UPDATE string_tbl SET text_fld =

  'This string didn\'t work, but it does now'

2.9.6. 如果要檢索字元串,以用於屏幕顯示或報表欄位,則無須對內嵌引號作任何特殊處理

2.9.7. 如果要將檢索出的字元串添加到其他程式要讀取的文件中,就需要將轉義字元加入字元串

2.9.7.1. 如果使用的是MySQL,可以通過內建函數quote()來實現,該函數會將整個字元串放入引號內並對其中任意的引號/撇號進行轉義

2.9.7.2. mysql

-> SELECT quote(text_fld)
    -> FROM string_tbl;

2.9.7.3. 在檢索數據用於數據導出時,可以對所有非系統生成的字元列(比如customer_notes列)使用quote()函數

2.10. 包含特殊字元

2.10.1. SQL Server和MySQL伺服器包含內建函數char()

2.10.2. Oracle Database用戶可以使用chr()函數

2.10.3. 用於從ASCII字元集的255個字元中任意構建字元串

2.10.4. 需要熟悉字元集的佈局,從中定位特定的字元

2.10.5. 可以使用concat()函數來拼接若幹字元串,可以自行輸入這些字元串,也可以通過char()函數生成

2.10.5.1. Oracle Database用戶可以使用拼接運算符(||)代替concat()函數

2.10.5.2. SQL Server並未提供concat()函數,需要使用拼接運算符(+)代替

2.10.6. 可以使用ascii()函數,該函數接受字元串最左側的字元,並返回其編碼數值

2.10.7. 使用char()、ascii()和concat()函數(或者拼接運算符),應該能夠處理任何羅馬字元,即使所用的鍵盤不包括重音字元或其他特殊字元

2.10.8. 返回數值的字元串函數

2.10.8.1. length()

2.10.8.1.1. 該函數返回字元串所包含的字元數
2.10.8.1.2. SQL Server用戶需要使用len()函數

2.10.8.2. position()函數

2.10.8.2.1. 字元串中查找子串的位置
2.10.8.2.2. 在使用資料庫時,一定要記住,字元串的第一個字元的位置為1
2.10.8.2.3. 如果沒有找到指定的子串,position()函數返回0
2.10.8.2.4. SQL:2003標準的一部分

2.10.8.3. locate()函數

2.10.8.3.1. MySQL專有的
2.10.8.3.2. 從目標字元串的其他位置開始搜索
2.10.8.3.3. 可以接受可選的第3個參數,該參數用於指定搜索的起始位置

2.10.8.4. instr()函數

2.10.8.4.1. Oracle Database專有
2.10.8.4.2. Oracle Database未提供函數position()或locate()
2.10.8.4.3. 該函數在使用兩個參數時,能夠模擬position()函數
2.10.8.4.4. 使用三個參數時,能夠模擬locate()函數
2.10.8.4.5. 返回值0 表示沒有找到指定的子串,而不是表示該子串位於字元串的位置0

2.10.8.5. charindx()函數

2.10.8.5.1. SQL Server專有
2.10.8.5.2. SQL Server也沒有提供position()或locate()函數
2.10.8.5.3. 該函數和Oracle的instr()函數類似,也可以接受兩個或三個參數

2.10.8.6. strcmp()

2.10.8.6.1. MySQL專有
2.10.8.6.1.1. 不區分大小寫
2.10.8.6.2. 無法在Oracle Database和SQL Server中模擬
2.10.8.6.3. 一個接受字元串作為參數並返回數值的字元串比較函數
2.10.8.6.3.1. −1(第一個字元串的排序位於第二個字元串之前)
2.10.8.6.3.2. 0(兩個字元串相同)
2.10.8.6.3.3. 1(第一個字元串的排序位於第二個字元串之後)
2.10.8.6.4. MySQL還允許在select子句中使用運算符like和regexp來比較字元串
2.10.8.6.4.1. 比較的結果為1(true)或0(false)

2.10.9. 返回字元串的字元串函數

2.10.9.1. concat()函數

2.10.9.1.1. 通過數據片段構建字元串
2.10.9.1.2. Oracle中使用,可以使用拼接運算符(||)來代替
2.10.9.1.3. SQL Server的拼接運算符(+)代替||

2.10.9.2. 在字元串中間添加或替換部分字元

2.10.9.2.1. insert()函數
2.10.9.2.1.1. MySQL提供的函數接受4個參數:原始字元串、起始位置、要替換的字元數量和替換字元串
2.10.9.2.1.2. mysql> SELECT INSERT('goodbye world', 1, 7, 'hello') string;
2.10.9.2.2. replace()函數
2.10.9.2.2.1. Oracle Database
2.10.9.2.2.2. SELECT REPLACE('goodbye world', 'goodbye', 'hello') FROM dual;
2.10.9.2.3. SQL Server也有replace()函數,其功能與Oracle Database的相同
2.10.9.2.4. SQL Server還提供了與MySQL的insert()函數功能相似的stuff()函數
2.10.9.2.4.1. SELECT STUFF('hello world', 1, 5, 'goodbye cruel')
2.10.9.2.5. 從字元串中提取子串
2.10.9.2.5.1. 三種資料庫伺服器均提供了substring()函數
2.10.9.2.5.2. Oracle Database提供的是substr()函數

3. 算術函數

3.1. acos(X)

3.1.1. 計算x的反餘弦

3.2. asin(x)

3.2.1. 計算x的反正弦

3.3. atan(x)

3.3.1. 計草x的反正切

3.4. cos(x)

3.4.1. 計軍x的餘弦

3.5. cot(x)

3.5.1. 計算x的餘切

3.6. exp(x)

3.6.1. 計算e

3.7. ln(x)

3.7.1. 計算x的自然對數

3.8. sin(x)

3.8.1. 計軍x的正弦

3.9. sqrt(x)

3.9.1. 計軍x的平方根

3.10. tan(x)

3.10.1. 計算x的正切

3.11. mod()函數

3.11.1. 用於計算餘數

3.11.2. 常用於整數參數

3.11.3. MySQL中也可以使用實數

3.11.3.1. mysql> SELECT MOD(22.75, 5);

3.11.4. SQL Server未提供mod()函數,可以使用運算符%來代替

3.12. pow()函數

3.12.1. 返回第一個參數的第二個參數次冪

3.12.2. Oracle Database或SQL Server,則為power()函數

3.12.3. pow(2,8)是MySQL中用於計算2^8的方式

3.12.4. 電腦記憶體通常是以2x位元組為單位分配的,所以pow()函數可以非常方便地確定某段記憶體確切的位元組數

3.12.4.1. mysql

-> SELECT POW(2,10) kilobyte, POW(2,20) megabyte,
    -> POW(2,30) gigabyte, POW(2,40) terabyte;

4. 數值精度

4.1. 在處理浮點數時,可能並不總是需要使用或顯示數值的全精度

4.2. ceil()

4.2.1. SQL Server使用ceiling()替代ceil()

4.2.2. 向上取整

4.2.2.1. 哪怕小數部分非常小

4.3. floor()

4.3.1. 向下取整

4.3.1.1. 哪怕小數部分非常大

4.4. round()

4.4.1. 四捨五入

4.4.2. 使用負數作為第2個參數,表示小數點左側的部分需要被截取或取整多少位

4.5. truncate()

4.5.1. Oracle Database使用trunc()替代truncate()

4.5.2. 將不需要的小數位直接丟棄

4.5.3. SQL Server並未提供truncate()函數,而round()函數的第3個可選參數如果存在且不為0,則表明要執行截取操作,而非取整

4.5.4. 使用負數作為第2個參數,表示小數點左側的部分需要被截取或取整多少位

5. 有符號數

5.1. abs()函數

5.1.1. 絕對值

5.2. sign()函數

5.2.1. 負數,則返回−1

5.2.2. 0,則返回0

5.2.3. 正數,則返回1


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • # EF Core併發控制 # 併發控制概念 1. 併發控制:避免多個用戶同時操作資源造成的併發衝突問題。 2. 最好的解決方案:非資料庫解決方案 3. 資料庫層面的兩種策略:悲觀、樂觀 # 悲觀鎖 悲觀併發控制一般採用行鎖 ,表鎖等排他鎖對資源進行鎖定,確保同時只有一個使用者操作被鎖定的資源。 E ...
  • # Unity UGUI的Scrollbar(滾動條)組件的介紹及使用 ## 一、什麼是Scrollbar組件? Scrollbar組件是Unity中UGUI系統提供的一種UI組件,主要用於在UI界面中提供滾動條功能,使用戶可以通過滾動條來查看超出屏幕範圍的內容。 ## 二、Scrollbar組件是 ...
  • 在我寫[在.NET Framework中使用RocketMQ(阿裡雲版)]這篇博客的時候,因為封裝了很多代碼在單獨的DLL中,包括生產者、消費者以及官方SDK等等,然後都在博客中體現出來導致博客大量代碼,然後有位讀者就建議打包成NuGet包,大家也可以直接安裝調用,我也覺得很不錯,於是就有了這篇文章... ...
  • # Redis 文章內容主要參考b站 運維實戰課程 的redis視頻:[redis的課程介紹_嗶哩嗶哩_bilibili](https://www.bilibili.com/video/BV1cP4y1D7yh?p=1) ## 簡介 1.Redis是一個緩存資料庫,主要是做緩存。什麼是緩存?也就是緩 ...
  • [toc] # Linux運維工程師面試題(6) > 祝各位小伙伴們早日找到自己心儀的工作。 > 持續學習才不會被淘汰。 > 地球不爆炸,我們不放假。 > 機會總是留給有有準備的人的。 > 加油,打工人! ## 1 資料庫事務的四個特性及含義 資料庫事務的4個特性:原⼦性、持久性、⼀致性、隔離性 - ...
  • 哈嘍大家好,我是鹹魚 我們知道字典是 Python 中最重要且最有用的內置數據結構之一,它們無處不在,是語言本身的基本組成部分 我們可以使用字典來解決許多編程問題,那麼今天我們就來看看**如何在 Python 中遍歷字典** 全文內容:https://realpython.com/iterate-t ...
  • 寶塔Linux面板是提升運維效率的伺服器管理軟體,目前使用免費的版本功能齊全,已經足夠使用了。 [西瓜程式猿]使用阿裡雲伺服器網以CentOS操作系統為例,安裝寶塔Linux面板,先遠程連接到雲伺服器,然後執行寶塔面板安裝命令,系統會自動安裝寶塔面板,安裝完成後會返回面板地址、賬號和密碼 。 ...
  • 本篇文章探索了文件系統的功能規劃,著重討論了文件存儲、索引節點和目錄項的管理、緩存策略以及文件數據的存儲等方面。文件系統作為電腦系統中重要的組成部分,對於實現高效、可靠的文件管理與訪問機制至關重要。通過深入瞭解文件系統的基本單位、元信息記錄和目錄結構,我們可以更好地理解文件系統的工作原理,本文旨在... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...