【學習總結】SQL的學習-4-經常使用函數介紹

參考連接

目錄

=======================================================html

合併字符串函數

概述

  • 字符函數接受字符參數,這些參數能夠是表中的列,也能夠是一個字符串表達式。

合併字符串函數concat

  • 語法:concat(s1,s2,...,sn)

  • 解析

    • 該函數會將傳入的參數鏈接起來返回合併的字符串類型的數據。sql

    • 若是其中一個參數爲null,則返回值爲null。數據庫

  • 合併字符串(即數據不是來自表,而是直接手動鍵入的):

    • 示例1:select concat ('huang','lao','shi'), concat('huang','lao','shi',null) -- 直接輸出語句中的字符串
      session

    • 示例2:select concat(curdate(),12.2);
      函數

  • 將字段合併輸出

    • 示例:select concat (name, "|", house_location) from houses;

合併字符串函數concat_ws

  • 語法:concat_ws(seq, s1, s2, ... , sn)

  • 解析

    • 本函數與concat()的區別:多了一個表示分隔符的seq參數,不只將傳入的其餘參數鏈接起來,並且會經過分隔符將各個字符串分隔開來。學習

    • 分隔符能夠是一個字符,也能夠是其餘參數。若是分隔符爲null,則返回結果爲null。函數會忽略任何分隔符後的參數null。code

  • 使用分隔符合並字符串並輸出的示例

    • 示例1:select concat_ws('-','020','8331234567');
      orm

    • 示例2:select concat_ws('-','020','8331234567'); -- 鏈接多個字符串
      htm

    • 示例3:select concat_ws('null','020','8331234567'), concat_ws('-','020','null','8331234567'); -- null的處理
      blog

=======================================================

比較字符串大小的函數

獲取字符串長度的函數length

  • 關鍵字:

    • 獲取字符串長度函數:length()

    • 獲取字符數函數:char_length()

  • 語法:

    • length(str):一個漢字算3個字符,一個數字或字母算一個字符。

    • char_length(str):無論是漢字仍是數字或字母,都算一個字符。

  • 示例:

    • 示例1:對比漢字和字母數字的不一樣結果

    • 示例2:數字的結果對比

    • 示例3:對負數的處理。注:ceil(n) 取大於等於數值n的最小整數;

比較字符串大小的函數strcmp

  • 關鍵字:strcmp()

  • 語法:strcmp(str1, str2)

  • 解析:

    • 若是str1>str2,則返回1;若是str1<str2,則返回-1;若是str1==str2,則返回0。
  • 示例:(根據安裝時的配置,遵循utf-8字符串的規律,基於不一樣字符集,可能結果不一樣)

    • 示例1:等長,且相同大小寫的字母比較

    • 示例2:相同字母的大小寫比較

    • 示例3:不等長的字母比較

    • 示例4:單個數字比較

    • 示例5:不等長的數字比較

    • 示例6:單箇中文字符比較

=======================================================

大小寫轉換函數

將字母轉換爲大寫的函數upper和ucase

  • 語法:

    • upper(s)

    • ucase(s)

將字母轉換爲小寫的函數lower和lcase

  • 語法:

    • lower(s)

    • lcase(s)

示例

  • 字母轉換對比:結果一致

  • 只有非字母符號時:直接輸出,結果不變

  • 字母與非字母組合:字母正常轉換,非字母不變

=======================================================

查找字符串函數

返回字符串位置的函數find_in_set

  • 關鍵字:find_in_set()

  • 語法:find_in_set(str1, str2)

  • 解析:

    • 該函數會返回在字符串str2中與str1相匹配的字符串的位置,參數str2字符串中包含若干個用逗號隔開的字符串。
  • 示例:


返回指定字符串位置的函數field

  • 關鍵字:field()

  • 語法:field(str, str1, str2...)

  • 解析:

    • 該函數返回第一個與字符串str匹配的字符串的位置。
  • 區別:

    • 字符串個數:find_in_set只有兩個字符串,而field能夠傳入多個字符串。
    • 空格:find_in_set空格在任意位置都有效,而field放在前面的空格有效,放在後面的空格可忽略。
  • 示例:

返回指定位置的字符串的函數elt

  • 關鍵字:elt()

  • 語法:elt(n,str1,str2,...);

  • 解析:

    • 返回指定位置n的字符串
  • 注意:

    • 若是n超過了字符串個數的範圍,(大於或小於),則返回null;

    • 對於空格:任意位置的空格(前面的空格或者後面的空格)都算在返回結果內,不會自動刪除。

  • 示例:


=======================================================

字符串截取與替換函數

從左邊或右邊截取子字符串的函數left和right

  • 語法:left(str, num), right(str, num)

  • 解析:

    • 返回字符串str中包含前num個字母(從左邊數)、(從右邊數)的字符串,並按照原順序返回結果。

    • 參數num超出正常範圍時:返回空白,沒有null的空白那種。

  • 示例:


截取指定位置和長度的字符串的函數substring

  • 語法1:substring(str, num, len)

  • 解析:

    • 返回字符串str中的第num個位置開始,且長度爲len的子字符串。
  • 示例:

  • 語法2:mid(str, num, len)

  • 解析:

    • substring(str,pos,len)的同義詞,參數從1開始,不是從0開始。
  • 示例:

替換字符串的函數replace

  • 語法:replace(str, substr, newstr)

  • 解析:

    • 將字符串str中的子字符串substr用字符串newstr來替換。
  • 示例:

=======================================================

獲取整數函數

返回大於或等於數值x的最小整數的函數ceil

  • 語法:ceil(x)

  • 示例:

返回小於或等於數值x的最大整數的函數floor

  • 語法:floor(x)

  • 示例:

截取數值函數truncate

  • 語法:truncate(x,y)

  • 解析:

    • 返回數值x,保留小數點後y位。
  • 注意:

    • y爲正數即取小數點,y爲負數即往整數位截取;簡單粗暴直接截取,並不進行四捨五入。
  • 示例:

函數返回值x通過四捨五入操做後的數值的函數round

  • 語法:round(x);round(x,y)

  • 解析:

    • x表示原數值,y表示要保留的小數位數。y能夠省略。
  • 注意:

    • 負數:數值位按照正數處理,不按照負數的數學規則。
  • 對比:round與truncate

    • round:截取並四捨五入;truncate:直接截取,不四捨五入。
  • 示例:



=======================================================

獲取日期和時間的函數

獲取當前日期和時間的函數now和sysdate

  • 關鍵字:

    • now(); sysdate(); current_timestamp(); current_date(); current_time();
  • 語法:

    • 使用select 函數名(); -- 來查看時間函數的返回值
  • now():返回該條語句(而不是該函數)運行時的具體日期時間。

  • sysdate():與now()相似。

  • 三個current時間函數:結果同now,不變。

    • current_timestamp():獲取當前時間戳,包括年月日+時分秒。

    • current_date():獲取當前日期,包括年月日。

    • current_time():獲取當前時間,包括時分秒。

  • 辨析:

    • now():在語句執行開始時,值就獲得了,後面再取,值不變;

    • sysdate():在函數執行時動態獲得值,後面再取,值會變。

  • 示例:


獲取日期和時間各部分值year和hour等




=======================================================

格式化函數

format函數

  • 語法與解析:

    • 格式化數字:format(x,y):把x格式化爲以逗號隔開的數字序列,y是結果的小數位數。

    • 格式化時間:date_format(date,fmt), time_format(time,fmt) :

      • 依照字符串fmt格式化時間:'%+字母+分隔符+%+字母+分隔符+...'
      • 不一樣字母表明不一樣含義:y-年,m-月,d-日,w-星期,r-帶AM,PM的時分秒,p-僅am/pm, h-i-s:時分秒,等。
      • 注意:相同字母的不一樣大小寫,對應不一樣的輸出格式。
  • 注意:format-數字時會進行四捨五入。

  • 示例







去除首尾空格函數trim

  • 關鍵字:

    • ltrim(str), rtrim(str), trim(str)
  • 解析:

    • 返回去掉開始處、結束處、首尾空格的字符串
  • 示例

=======================================================

聚合函數

關鍵字 avg sum count min max

語法與解析

  • 注意:

    • 一、格式:select + 函數名(參數名)

    • 二、配合group by進行分組,注意字段有重複元素和無重複元素獲得的結果的不一樣。

示例



=======================================================

控制流函數

條件IF

  • 語法:IF(test, t, f)

  • 解析:若是test爲真,返回t;不然,返回f。

  • 示例:

    • SELECT IF(1<10, 2, 3); -- 輸出:2

判非空IFNULL

  • 語法:IFNULL(arg1, arg2)

  • 解析:若是arg1不是空,則返回arg1;不然,返回arg2。

    • 注:參數能夠是select語句。
  • 示例:


相等則返回空NULLIF

  • 語法:NULLIF(arg1, arg2)

  • 解析:若是arg1=arg2,則返回null;不然,,返回arg1。

  • 示例:

組合判斷1-case-when

  • 語法:CASE WHEN[test1] THEN [result1] WHEN..THEN.. ELSE [default] END

    • 注意:此處的when至關於switch-case裏的每一個case,能夠組合爲when...when....when...else;注意else別放在when中間。
  • 解析:若是testN爲真,則返回resultN;不然,返回default。

    • 注:若是有多個符合,則返回第一個匹配的testN對應的結果。
  • 示例:

組合判斷2-case-xx-when

  • 語法:CASE[test] WHEN[val1] THEN [result1] WHEN..THEN.. ELSE [default] END

  • 解析:若是test和valN相等,則返回resultN,不然返回default。

    • 注意:若是有多個符合,則返回第一個匹配的testN對應的結果。
  • 示例:


=======================================================

系統信息函數

查詢系統函數version-database-user等

  • 語法與解析

    • 返回數據庫版本號:version()

    • 返回當前數據庫名:database()

    • 返回當前用戶名:user(), system_user(), session_user(), current_user()

  • 示例:





END

相關文章
相關標籤/搜索