MySQL 常见函数

jopen 10年前

字符串函数


CONCAT(str1,str2,...)
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
[sql] view plai
</div> </div>
  1. mysql> SELECT CONCAT('My''S''QL');  
  2.         -> 'MySQL'  
  3.   
  4. mysql> SELECT CONCAT('My'NULL'QL');  
  5.         -> NULL  
  6.   
  7. mysql> SELECT CONCAT(14.3);  
  8.         -> '14.3'  
</div> </div>

GROUP_CONCAT函数
将取得的值用逗号连接。
[sql] view plai
</div> </div>
  1. select group_concat(id) from table_name;  
</div> 得到的结果是(1,2,3,4,5)</div>

LEFT,RIGHT函数
left(str,n)或者right(str,n)
返回字符串最左边/右边的n个字符。

REVERSE函数
reverse(str)
返回字符串str,顺序与字符顺序相反.

LENGTH函数,CHAR_LENGTH函数
length(str) char_length(str)
length: 是计算字段的长度一个汉字是算两个字符,一个数字或字母算一个字符
char_length:不管汉字还是数字或者是字母都算是一个字符。

SUBSTRING()
SUBSTRING(str,pos,len)
SUBSTRING(str FROM pos FOR len)
SUBSTRING(str,pos)
SUBSTRING(str FROM pos)
[sql] view plain
</div> </div>
  1. mysql> SELECT SUBSTRING(‘Quadratically’,5);-> ‘ratically’  
  2. mysql> SELECT SUBSTRING(‘foobarbar’ FROM 4);-> ‘barbar’  
  3. mysql> SELECT SUBSTRING(‘Quadratically’,5,6);-> ‘ratica’  
  4. mysql> SELECT SUBSTRING(‘Sakila’, -3);-> ‘ila’  
  5. mysql> SELECT SUBSTRING(‘Sakila’, -5, 3);-> ‘aki’  
  6. mysql> SELECT SUBSTRING(‘Sakila’ FROM -4 FOR 2);-> ‘ki’  
</div> </div>

SUBSTRING_INDEX(str,delim,count)
返回字符串 str 中在第 count 个出现的分隔符 delim 之前的子串。
如果 count 是一个正数,返回从最后的(从左边开始计数)分隔符到左边所有字符。
如果 count 是负数,返回从最后的(从右边开始计数)分隔符到右边所有字符。 
mysql>SELECT SUBSTRING_INDEX('www.baidu.com', '.', 2); -> 'www.baidu' 
mysql> SELECT SUBSTRING_INDEX('www.baidu.com', '.', -2); -> 'baidu.com' 

LOCATE(substr,str) ,判断某个字符串是否存在某个标示符
返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0: 
mysql> SELECT LOCATE('bar', ‘foobarbar'); 
-> 4 
mysql> SELECT LOCATE('xbar', ‘foobar'); 
-> 0 

字符串比较函数


根据,MySQL 会自动将数字转化为字符串,反之亦然。 

mysql> SELECT 1+'1';

        -> 2

mysql> SELECT CONCAT(2,' test');

        -> '2 test'

若想要将数字明确地转化为字符串,可使用 CAST() CONCAT()函数:

mysql> SELECT 38.8, CAST(38.8 AS CHAR);

        -> 38.8, '38.8'

mysql> SELECT 38.8, CONCAT(38.8);

        -> 38.8, '38.8'

CAST() 比较可取.

一般而言若字符串比较中任意一个表达式是区分大小写的,则执行比较时也区分大小写。 

  • expr LIKE pat [ESCAPE 'escape-char']

模式匹配,使用SQL简单正规表达式比较。返回1 (TRUE)  0 (FALSE)。 若 expr 或 pat 中任何一个为 NULL,则结果为 NULL

模式不需要为文字字符串。例如,可以被指定为一个字符串表达式或表列。

在模式中可以同LIKE一起使用以下两种通配符:

字符

说明

%

匹配任何数目的字符,甚至包括零字符 

_

只能匹配一种字符

STRCMP函数

若所有的字符串均相同,则返回STRCMP(),若根据当前分类次序,第一个参数小于第二个,则返回  -1,其它情况返回 1 

mysql> SELECT STRCMP('text', 'text2');

        -> -1

mysql> SELECT STRCMP('text2', 'text');

        -> 1

mysql> SELECT STRCMP('text', 'text');

        -> 0


控制流函数


CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END 
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
在第一个方案的返回结果中, value=compare-value。而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。

</div>
IF(expr1,expr2,expr3)函数
</div>
如果expr1为True,则返回expr2,否则返回expr3。
expr1 作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符串值, 那么应该使用比较运算进行检验。
[sql] view plai
</div> </div>
  1. mysql> SELECT IF(1>2,2,3);  
  2.         -> 3  
  3.   
  4. mysql> SELECT IF(1<2,'yes ','no');  
  5.         -> 'yes'  
  6.   
  7. mysql> SELECT IF(STRCMP('test','test1'),'no','yes');  
  8.         -> 'no'  
</div> </div>

IFNULL(expr1,expr2)
假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。这个函数一般用来替换NULL值,因为NULL值是不能参与数值运算的,下面这个语句就可以把NULL值用0来替换。
[sql] view plaincop
</div> </div>
  1. mysql> SELECT IFNULL(1,0);  
  2.         -> 1  
  3.   
  4. mysql> SELECT IFNULL(NULL,10);  
  5.         -> 10  
  6.   
  7. mysql> SELECT IFNULL(1/0,10);  
  8.         -> 10  
  9.   
  10. mysql> SELECT IFNULL(1/0,'yes');  
  11.         -> 'yes'  
</div>
</div>
NULLIF(expr1,expr2)
如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。
这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。
[sql] view plaincopy
</div> </div>
  1. mysql> SELECT NULLIF(1,1);  
  2.         -> NULL  
  3.   
  4. mysql> SELECT NULLIF(1,2);  
  5.         -> 1  
</div> </div>

coalesce函数,返回参数中第一个不为空的值
[sql] view plaincopy
</div> </div>
  1. select coalesce(a,b,c) from table_name;  
</div> 如果a不为null,则选择a;如果a为null ,则选择b;如果b为null,则选择c;如果a、b、c都为null,则返回null。</div>

GREATEST(value1,value2,...)
当有2或多个参数时,返回值为最大(最大值的)参数。比较参数所依据的规律同LEAST()相同。
[sql] view plain
</div> </div>
  1. mysql> SELECT GREATEST(2,0);  
  2.         -> 2  
  3.   
  4. mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);  
  5.         -> 767.0  
  6.   
  7. mysql> SELECT GREATEST('B','A','C');  
  8.         -> 'C'  
</div> </div>



数学函数


</div>
ROUND(x)返回离x最近的整数,也就是对x进行四舍五入处理
ROUND(x,y)返回x保留到小数点后y位的值,在截取时进行四舍五入处理
TRUNCATE(x,y)返回x保留到小数点后y位的值,不进行四舍五入操作
符号函数SIGN(x),返回x的符号,正数为1,负数为-1,0为0
CEIL(x)和CEILING(x)返回大于或等于x的最小整数
FLOOR(x)返回小于或等于x的最大整数
RAND()返回0~1内的随机数

类型转化函数


BINARY函数
BINARY操作符将后面的字符串抛给一个二进制字符串。这是一种简单的方式来促使逐字节而不是逐字符的进行列比较。这使得比较区分大小写,即使该列不被定义为 BINARY或 BLOB。BINARY也会产生结尾空白,从而更加显眼。
mysql> SELECT 'a' = 'A'; 
 -> 1
mysql> SELECT BINARY 'a' = 'A';
 -> 0
mysql> SELECT 'a' = 'a ';
 -> 1
mysql> SELECT BINARY 'a' = 'a ';
 -> 0
BINARY影响整个比较;它可以在任何操作数前被给定,而产生相同的结果。BINARY str 是CAST(str AS BINARY)的缩略形式。

CAST、CONVERT函数
cast(expr as type),convert(expr as type),convert(expr using transcoding_name)
cast和convert函数用来获取一个类型值,并转化为另外一个类型。
当需要在create ... select ... 中创建一个特殊类型的列时,cast函数比较有用。
create new_table select cast('2012-10-10' as DATE)
cast(expr as binary)和binary expr类似。

其他函数


MD5(str),返回字符串str的MD5值。常用于对应用中的数据进行加密。
select MD5('123456')

INET_ATON(IP地址),返回IP地址的网络字节序表示
INET_NTOA(num),返回网络字节序代码的ip地址。