mysql必知必會--使用數據處理函數

来源:https://www.cnblogs.com/ygjzs/archive/2020/01/22/12229961.html
-Advertisement-
Play Games

函數 與其他大多數電腦語言一樣,SQL支持利用函數來處理數據。函數 一般是在數據上執行的,它給數據的轉換和處理提供了方便。 在前一章中用來去掉串尾空格的 RTrim() 就是一個函數的例子 函數沒有SQL的可移植性強 能運行在多個系統上的代碼稱 為可移植的(portable)。相對來說,多數SQL ...


函數

與其他大多數電腦語言一樣,SQL支持利用函數來處理數據。函數
一般是在數據上執行的,它給數據的轉換和處理提供了方便。
在前一章中用來去掉串尾空格的 RTrim() 就是一個函數的例子

函數沒有SQL的可移植性強 能運行在多個系統上的代碼稱
為可移植的(portable)。相對來說,多數SQL語句是可移植的,
在SQL實現之間有差異時,這些差異通常不那麼難處理。而函
數的可移植性卻不強。幾乎每種主要的DBMS的實現都支持其
他實現不支持的函數,而且有時差異還很大。
為了代碼的可移植,許多SQL程式員不贊成使用特殊實現的功
能。雖然這樣做很有好處,但不總是利於應用程式的性能。如
果不使用這些函數,編寫某些應用程式代碼會很艱難。必須利
用其他方法來實現DBMS非常有效地完成的工作。
如果你決定使用函數,應該保證做好代碼註釋,以便以後你(或
其他人)能確切地知道所編寫SQL代碼的含義

使用函數

大多數SQL實現支持以下類型的函數。

  • 用於處理文本串(如刪除或填充值,轉換值為大寫或小寫)的文
    本函數。
  • 用於在數值數據上進行算術操作(如返回絕對值,進行代數運算)
    的數值函數。
  • 用於處理日期和時間值並從這些值中提取特定成分(例如,返回
    兩個日期之差,檢查日期有效性等)的日期和時間函數。
  • 返回DBMS正使用的特殊信息(如返回用戶登錄信息,檢查版本
    細節)的系統函數

文本處理函數

使用 Upper() 函數

如所見, Upper() 將文本轉換為大寫,因此本例子中每個供
應商都列出兩次,第一次為 vendors 表中存儲的值,第二次作
為列 vend_name_upcase 轉換為大寫


表11-1中的 SOUNDEX 需要做進一步的解釋。 SOUNDEX 是一個將任何文
本串轉換為描述其語音表示的字母數字模式的演算法。 SOUNDEX 考慮了類似
的發音字元和音節,使得能對串進行發音比較而不是字母比較。雖然
SOUNDEX 不是SQL概念,但MySQL(就像多數DBMS一樣)都提供對
SOUNDEX 的支持。

下麵給出一個使用 Soundex() 函數的例子。 customers 表中有一個顧
客 Coyote Inc. ,其聯繫名為 Y.Lee 。但如果這是輸入錯誤,此聯繫名實
際應該是 Y.Lie ,怎麼辦?顯然,按正確的聯繫名搜索不會返回數據,如
下所示

現在試一下使用 Soundex() 函數進行搜索,它匹配所有發音類似於
Y.Lie 的聯繫名

在這個例子中, WHERE 子句使用 Soundex() 函數來轉換 cust_
contact 列值和搜索串為它們的 SOUNDEX 值。因為 Y.Lee 和
Y.Lie 發音相似,所以它們的 SOUNDEX 值匹配,因此 WHERE 子句正確地過濾
出了所需的數據

日期和時間處理函數

期和時間採用相應的數據類型和特殊的格式存儲,以便能快速和
有效地排序或過濾,並且節省物理存儲空間。
一般,應用程式不使用用來存儲日期和時間的格式,因此日期和時
間函數總是被用來讀取、統計和處理這些值。由於這個原因,日期和時
間函數在MySQL語言中具有重要的作用

用日期進行過濾需要註意一些別的問題和使用特殊的
MySQL函數。
首先需要註意的是MySQL使用的日期格式。無論你什麼時候指定一
個日期,不管是插入或更新表值還是用 WHERE 子句進行過濾,日期必須為
格式yyyy-mm-dd。因此,2005年9月1日,給出為2005-09-01。雖然其他的
日期格式可能也行,但這是首選的日期格式,因為它排除了多義性(如,
04/05/06是2006年5月4日或2006年4月5日或2004年5月6日或……)

應該總是使用4位數字的年份 支持2位數字的年份,MySQL
處理00-69為2000-2069,處理70-99為1970-1999。雖然它們可
能是打算要的年份,但使用完整的4位數字年份更可靠,因為
MySQL不必做出任何假定。

但是,使用 WHERE order_date = '2005-09-01' 可靠嗎? order_
date 的數據類型為 datetime 。這種類型存儲日期及時間值。樣例表中
的值全都具有時間值 00:00:00 ,但實際中很可能並不總是這樣。如果
用當前日期和時間存儲訂單日期(因此你不僅知道訂單日期,還知道
下訂單當天的時間),怎麼辦?比如,存儲的 order_date 值為
2005-09-01 11:30:05 ,則 WHERE order_date = '2005-09-01' 失敗。
即使給出具有該日期的一行,也不會把它檢索出來,因為 WHERE 匹配失
敗。
解決辦法是指示MySQL僅將給出的日期與列中的日期部分進行比
較,而不是將給出的日期與整個列值進行比較。為此,必須使用 Date()
函數。 Date(order_date) 指示MySQL僅提取列的日期部分,更可靠的
SELECT 語句為:

如果要的是日期,請使用 Date() 如果你想要的僅是日期,
則使用 Date() 是一個良好的習慣,即使你知道相應的列只包
含日期也是如此。這樣,如果由於某種原因表中以後有日期和
時間值,你的SQL代碼也不用改變。當然,也存在一個 Time()
函數,在你只想要時間時應該使用它。
Date() 和 Time() 都是在MySQL 4.1.1中第一次引入的。

如果你想檢索出2005年9月下的
所有訂單,怎麼辦?簡單的相等測試不行,因為它也要匹配月份中的天
數。有幾種解決辦法,其中之一如下所示

其中, BETWEEN 操作符用來把 2005-09-01 和 2005-09-30 定義為
一個要匹配的日期範圍。
還有另外一種辦法(一種不需要記住每個月中有多少天或不需要操
心閏年2月的辦法)

Year() 是一個從日期(或日期時間)中返回年份的函數。類似,
Month() 從日期中返回月份。因此, WHERE Year(order_date)
= 2005 AND Month(order_date) = 9 檢索出 order_date 為2005年9月的
所有行

MySQL的版本差異 MySQL 4.1.1中增加了許多日期和時間
函數。如果你使用的是更早的MySQL版本,應該查閱具體的
文檔以確定可以使用哪些函數

數值處理函數

數值處理函數僅處理數值數據。這些函數一般主要用於代數、三角
或幾何運算,因此沒有串或日期 — 時間處理函數的使用那麼頻繁。
具有諷刺意味的是,在主要DBMS的函數中,數值函數是最一致最統
一的函數。表11-3列出一些常用的數值處理函數

本章介紹瞭如何使用SQL的數據處理函數,並著重介紹了日期處理函
數。


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

-Advertisement-
Play Games
更多相關文章
  • 微信公眾號: "Dotnet9" ,網站: "Dotnet9" ,問題或建議: "請網站留言" , 如果對您有所幫助: "歡迎贊賞" 。 .NET CORE(C ) WPF 重新設計Instagram 閱讀導航 1. 本文背景 2. 代碼實現 3. 本文參考 4. 源碼 1. 本文背景 老外的一個界 ...
  • 這是該系列的第二篇文章: "在ASP.NET Core 3.0中使用Serilog.AspNetCore" 。 1. "第1部分 使用Serilog RequestLogging來簡化ASP.NET Core的日誌輸出" 2. "第2部分 用Serilog記錄所選終結點的附加屬性" (本文) 3. ...
  • 基礎教程之導出Pdf收據 說明 本教程主要說明如何使用Magicodes.IE.Pdf完成Pdf收據導出 要點 導出PDF數據 自定義PDF模板 導出單據 如何批量導出單據 導出特性 PdfExporterAttribute + Orientation : 方向(橫向或縱向) + PaperKind ...
  • 本文介紹調用Spire.Cloud.Word.SDK提供的介面shapesApi來操作Word形狀,包括添加形狀AddShape(),添加形狀時,可設置形狀類型、顏色、大小、位置、傾斜、輪廓、文本環繞方式、順序);刪除形狀DeleteShape()和讀取形狀屬性GetShapeProperties( ...
  • NuGet微軟官方中國鏡像地址: https://nuget.cdn.azure.cn/v3/index.json 打開Visual Studio => 工具 => NuGet包管理器 => 程式包管理器設置 找到“Net包管理器” => “程式包源”,點擊“+”新建項,將地址https://nug ...
  • 要點 導出特性 如何導出Excel表頭 如何導出數據、如何進行數據的切割、如何使用篩選器 導出特性 ExporterAttribute + Name : 名稱(當前Sheet 名稱) + HeaderFontSize :頭部字體大小 + FontSize :正文字體大小 + MaxRowNumber ...
  • 首先在左下角輸入cmd搜索->命令提示符->以管理員身份運行->然後複製下麵一段命令: dism /online /norestart /add-package:%SystemRoot%\servicing\Packages\Microsoft-Windows-IIS-WebServer-AddOn ...
  • https://sqlserver.code.blog/2020/01/22/failed-to-restart-polybase-data-movement-after-running-sp_polybase_join_group/ ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...