讀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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...