1. 程式人生 > >sql語句常見函式

sql語句常見函式

常見函式

  • 語法:
    select 函式名(實參列表) 【from 表】;

  • 分類:

  • 單行函式
    字元函式

concat:連線
substr:擷取子串
upper:大寫
lower:小寫
replace:替換
length:獲取位元組長度
trim:去除前後空格
lpad:左填充
rpad:右填充
instr:獲取子串第一次出現的索引

數學函式

ceil:向上取整
round:向下取整
mod:取模
floor:向下取整
truncate:截斷
rand:獲取隨機數,返回0-1之間的小數

日期函式

now:返回當前日期+時間
year:返回年
month:返回月
day:返回日
data_format:將日期轉換成字元
curdate:返回當前日期
curtime:返回當前時間
str_to_data:將字元轉換成日期
datadiff:返回兩個日期相差得天數
monthname:以英文形式返回月

其他函式

version:當前資料庫伺服器版本
database:當前開啟的資料庫
user:當前使用者
password(‘字元’):返回該字元得的加密形式
md5(‘字元’):返回該字元得的加密形式

流程控制函式

if(條件表示式, 表示式1, 表示式2);

case 變數或者表示式或者欄位
when 常量1 then 值1
when 常量2 then 值2

else 值n
end;

case
when 條件1 then 值1
when 條件2 then 值2

else 值n
end;

  • 分組函式

max, min, sum, avg,count

  • 功能:做統計使用,又稱為統計函式
  • 語法:select max(【distinct】欄位) from 表名
  • 支援: sum和avg一般用於處理數值型,max、min、count可以處理任何資料型別。以上分組函式都可以支援null

單行函式

1、字元函式

length獲取引數值的位元組個數

SELECT LENGTH("holy"); #4
SELECT LENGTH("長度"); #3*2 

concat 拼接字串

SELECT CONCAT(uname, '_', upassword) FROM userinfo;

upper大寫, lower小寫

SELECT UPPER("hLow"), LOWER("Hlow");

substr, substring擷取字元.

  • 擷取從指定索引處後面所有字元,包括指定的哪個字元。注意,索引從1開始

    SELECT SUBSTR('張三丰與郭襄', -2); #郭襄
    SELECT SUBSTR('張三丰與郭襄', 5); #郭襄
    
  • 擷取從指定索引處指定字元長度的字元

      SELECT SUBSTR('張三丰與郭襄', 1, 3); 
    

instr:返回子串第一次出現的索引,如果找不到就返回0

SELECT INSTR('張三丰與郭襄', '郭襄'); #5,郭襄對應張三丰與郭襄中的索引是5

trim:

SELECT TRIM("     abc   "); #去除字串首尾的空格
SELECT TRIM('a' FROM "aaaaaaa   aaaaa掌聲aaaaaaaa   "); #    aaaaa掌聲aaaaaaaa   :去除字串首尾的的a,不去除空格
SELECT TRIM('aa' FROM "aaaaaaaaaaa掌聲aaaaaaaa   ");  #a掌聲aaaaaaaa   

lpad:用指定的字元填充實現左指定的長度,如果源字串的長度大於指定的長度就截斷

SELECT LPAD('智慧', 10, '*');
SELECT LPAD('智慧', 1, '*');

rpad:用指定的字元填充實現右指定的長度,如果源字串的長度大於指定的長度就截斷

SELECT RPAD('智慧', 10, '*');

replace替換

SELECT REPLACE('你好啊,世界', '世界', '宇宙');

2、數學函式

round 四捨五入

SELECT ROUND(1.49);  #1
SELECT ROUND(1.50);  #2
SELECT ROUND(-1.5);   #-2
SELECT ROUND(-1.6);   #-2
SELECT ROUND(1.6);   #2
SELECT ROUND(5.555, 2); # 5.56

ceil向上取整,返回>=該引數的最小整數

SELECT CEIL(-1.00); #-1
SELECT CEIL(-1.10); #-1
SELECT CEIL(1.00); #1
SELECT CEIL(1.10); #2

floor向下取整,返回<=該引數的最大整數

SELECT FLOOR(-1.00); #-1
SELECT FLOOR(-1.10); #-2
SELECT FLOOR(1.00); #1
SELECT FLOOR(1.10); #1

truncate 擷取小數位數

SELECT TRUNCATE(1.6999, 1); #1.6

mod取餘

SELECT MOD(10, 3); #1
SELECT MOD(10, -3); #1
SELECT MOD(-10, 3); #-1

其他函式

SELECT VERSION();  #mysql版本
SELECT DATABASE(); #當前使用的資料庫名
SELECT USER();     #當前使用者

流程控制函式

if函式:if-else

SELECT IF(1, "成立", "不成立");

case

  • 用法1:類似switch

  • 用法2:多重if
    /*
    case 要判斷的欄位或者表示式
    when 常量1 then 顯示1
    when 常量2 then 顯示2

    else 顯示n
    end
    */

      SELECT uname, 
      CASE uname 
      WHEN 1 THEN '顯示1' 
      WHEN 6 THEN '顯示6' 
      ELSE '顯示n' 
      END AS 姓名
      FROM userinfo;