mysql用户函数有哪些

mysql用户函数有哪些,第1张

用户函数?那应该是自己定义的函数吧

常用的函数有

1、MySQL 提供几个处理null的函数

1)、ifnull(expr1,expr2):如果expr1不为null,则返回expr1,否则返回expr2;

2)、nullif(expr1,expr2):expr1与expr2相等,则返回null,否则返回expr1;

3)、if(expr1,expr2,expr3):类似于三目运算符,expr1为true,返回expr2,否则返回expr3;

4)、isnull(expr1):判断expr1是否为null,expr1为null,返回true,否则返回false。

2、MySQL case函数

CASE 函数是一个流程控制函数,作用同c++中switch语句。有如下两种使用方法:

1)、用值比较

case value

when compareValue1 then result1

when compareValue2 then result2

……

else result

end

用value依次与各compareValue比较,相等则返回对应的result,并退出case函数。

2)、用条件判断

case

when condition1 then result1

when condition2 then result2

……

else result

end

各condition都为布尔表达式,从上到下判断,为true则返回对应的result,并退出case函数。

使用示例:

SELECT student_name,CASE

WHEN student_id<3 THEN ‘初级班’

WHEN student_id<=6 THEN '中级班'

ELSE ‘高级版'

END

FROM student_table

说明:上面语句选择student_name与student_id两列,只是student_id用CASE 函数替换为对应的文字说明。

3、部分时间日期函数

1)、CURTIME():返回完整的时间类型值,如:’2016-08-10 22:13:30‘;

2)、CURDATE():返回当前日期,时间部分为0,如:’2013-08-10 00:00:00‘;

3)、ADDTIME(time1,time2):time1为time或datetime表达式,time2为time表达式,如:

addtime(’2016-08-10 22:20:00‘,’10:10:10')返回2016-08-11 08:30:10

addtime(’2016-08-10 22:20:00‘,’1 10:10:10')返回2016-08-12 08:30:10

addtime(’22:20:00‘,’10:10:10')返回32:30:10,所以只有时分秒时应注意相加后的值是否大于23:59:59!

注:上面的参数值都可带微秒[.xxxxxx]。

4、部分字符串函数

1)、LEFT(param,length):返回包含param左边的length 个字符的字符串。length 大于param 长度时返回整个param。

2)、RIGHT(param,length):返回包含param右边length 个字符的字符串。同理。

最大用处在于param 可以是选出的某个列的数据,如最基础的用法:

select LEFT(e.name,5) from table1 e;

三、常用分组和组函数

常用组函数:

注:distinct:区别的。指定计算是否包含所有重复值。

1、avg([distinct|all]expr):计算多行expr的平均值,其中expr可以是变量、常量或数据列,但其类型必须是数值型;

2、count(*|[distinct|all]expr):计算多行的记录数。expr同上,但数据类型可以是任意类型;

3、max(expr):计算多行expr的最大值,expr同count中;

4、min(expr);

5、sum([distinct|all]expr):计算多行expr的总和,expr可以是变量、常量或数据列,但数据类型必须是数值型。

group by 分组与having过滤:

语法:

#查询结果按分组列不重复的显示。

select * from tableName group by columnName1[,columnName2,……];

说明:对于MySQL 如果被分组的列对应的其它列有多个对应值,则只显示第一条记录的值。

字符串或串(String)是由零个或多个字符组成的有限序列。一般记为 s='a1a2•••an'(n>=0)。它是编程语言中表示文本的数据类型。

通常以串的整体作为 *** 作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长 度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链 接存储方式。

下面我们来看看MySQL中的字符串函数

假如结果的长度大于 max_allowed_packet 系统变量的最大值时,字符串值函数的返回值为NULL。

对于在字符串位置 *** 作的函数,第一个位置的编号为 1。

◆ ASCII(str)

返回值为字符串str 的最左字符的数值。假如str为空字符串,则返回值为 0 。假如str 为NULL,则返回值为 NULL。 ASCII()用于带有从 0到255的数值的字符。

mysql> SELECT ASCII('2')

-> 50

mysql> SELECT ASCII(2)

-> 50

mysql> SELECT ASCII('dx')

-> 100

见 ORD()函数。

◆ BIN(N)

返回值为N的二进制值的字符串表示,其中  N 为一个longlong (BIGINT) 数字。这等同于 CONV(N,10,2)。假如N 为NULL,则返回值为 NULL。

mysql> SELECT BIN(12)

-> '1100'

◆ BIT_LENGTH(str)

返回值为二进制的字符串str 长度。

mysql> SELECT BIT_LENGTH('text')

-> 32

◆ CHAR(N,... [USING charset])

CHAR()将每个参数N理解为一个整数,其返回值为一个包含这些整数的代码值所给出的字符的字符串。NULL值被省略。

mysql> SELECT CHAR(77,121,83,81,'76')

-> 'MySQL'

mysql> SELECT CHAR(77,77.3,'77.3')

-> 'MMM'

大于 255的CHAR()参数被转换为多结果字符。 例如,CHAR(256) 相当于 CHAR(1,0), 而CHAR(256*256) 则相当于 CHAR(1,0,0):

mysql> SELECT HEX(CHAR(1,0)), HEX(CHAR(256))

+----------------+----------------+

| HEX(CHAR(1,0)) | HEX(CHAR(256)) |

+----------------+----------------+

| 0100 | 0100 |

+----------------+----------------+

mysql> SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256))

+------------------+--------------------+

| HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) |

+------------------+--------------------+

| 010000 | 010000 |

+------------------+--------------------+

CHAR()的返回值为一个二进制字符串。可选择使用USING语句产生一个给出的字符集中的字符串:

mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8))

mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8))

+---------------------+--------------------------------+

| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |

+---------------------+--------------------------------+

| binary| utf8 |

+---------------------+--------------------------------+

如果 USING已经产生,而结果字符串不符合给出的字符集,则会发出警告。同样,如果严格的SQL模式被激活,则CHAR()的结果会成为 NULL。

◆ CHAR_LENGTH(str)

返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。

◆ CHARACTER_LENGTH(str)

CHARACTER_LENGTH()是CHAR_LENGTH()的同义词。

◆ COMPRESS(string_to_compress)

压缩一个字符串。这个函数要求 MySQL已经用一个诸如zlib的压缩库压缩过。 否则,返回值始终是NULL。UNCOMPRESS() 可将压缩过的字符串进行解压缩。

mysql> SELECT LENGTH(COMPRESS(REPEAT('a',1000)))

-> 21

mysql> SELECT LENGTH(COMPRESS(''))

-> 0

mysql> SELECT LENGTH(COMPRESS('a'))

-> 13

mysql> SELECT LENGTH(COMPRESS(REPEAT('a',16)))

-> 15

压缩后的字符串的内容按照以下方式存储:

空字符串按照空字符串存储。

非空字符串未压缩字符串的四字节长度进行存储(首先为低字节),后面是压缩字符串。如果字符串以空格结尾,就会在后加一个"."号,以防止当结果值是存储 在CHAR或VARCHAR类型的字段列时,出现自动把结尾空格去掉的现象。(不推荐使用 CHAR 或VARCHAR 来存储压缩字符串。最好使用一个 BLOB 列代替)。

◆ CONCAT(str1,str2,...)

返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。如果所有参数均为非二进制字符串,则结果为非二进制字符串。如果自变量中含有任一二进制字符串,则结果为一个二进制字符 串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)

mysql> SELECT CONCAT('My', 'S', 'QL')

-> 'MySQL'

mysql> SELECT CONCAT('My', NULL, 'QL')

-> NULL

mysql> SELECT CONCAT(14.3)-> '14.3'

◆ CONCAT_WS(separator,str1,str2,...)

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参 数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。

mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name')

-> 'First name,Second name,Last Name'

mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name')

-> 'First name,Last Name'

CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

◆ CONV(N,from_base,to_base)

不同数基间转换数字。返回值为数字的N字符串表示,由from_base基转化为 to_base 基。如有任意一个参数为NULL,则返回值为 NULL。自变量 N 被理解为一个整数,但是可以被指定为一个整数或字符串。最小基数为 2 ,而最大基数则为 36。 If to_base 是一个负数,则 N 被看作一个带符号数。否则, N 被看作无符号数。 CONV() 的运行精确度为 64比特。

mysql> SELECT CONV('a',16,2)

-> '1010'

mysql> SELECT CONV('6E',18,8)

-> '172'

mysql> SELECT CONV(-17,10,-18)

-> '-H'

mysql> SELECT CONV(10+'10'+'10'+0xa,10,10)

-> '40'

◆ ELT(N,str1,str2,str3,...)

若N = 1,则返回值为  str1 ,若N = 2,则返回值为 str2 ,以此类推。若N 小于1或大于参数的数目,则返回值为 NULL 。 ELT() 是  FIELD()的补数。

mysql> SELECT ELT(1, 'ej', 'Heja', 'hej', 'foo')

-> 'ej'

mysql> SELECT ELT(4, 'ej', 'Heja', 'hej', 'foo')

-> 'foo'

◆ EXPORT_SET(bits,on,off[,separator[,number_of_bits]])

返回值为一个字符串,其中对于bits值中的每个位组,可以得到一个 on 字符串,而对于每个清零比特位,可以得到一个off 字符串。bits 中的比特值按照从右到左的顺序接受检验 (由低位比特到高位比特)。字符串被分隔字符串分开(默认为逗号‘,’),按照从左到右的顺序被添加到结果中。number_of_bits 会给出被检验的二进制位数 (默认为 64)。

mysql> SELECT EXPORT_SET(5,'Y','N',',',4)

-> 'Y,N,Y,N'

mysql> SELECT EXPORT_SET(6,'1','0',',',10)

-> '0,1,1,0,0,0,0,0,0,0'

◆ FIELD(str,str1,str2,str3,...)

返回值为str1, str2, str3,……列表中的str 指数。在找不到str 的情况下,返回值为 0 。

如果所有对于FIELD() 的参数均为字符串,则所有参数均按照字符串进行比较。如果所有的参数均为数字,则按照数字进行比较。否则,参数按照双倍进行比较。

如果str 为NULL,则返回值为0 ,原因是NULL不能同任何值进行同等比较。FIELD() 是ELT()的补数。

mysql> SELECT FIELD('ej', 'Hej', 'ej', 'Heja', 'hej', 'foo')

-> 2

mysql> SELECT FIELD('fo', 'Hej', 'ej', 'Heja', 'hej', 'foo')

-> 0

◆ FIND_IN_SET(str,strlist)

假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到 N 之间。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

mysql> SELECT FIND_IN_SET('b','a,b,c,d')

-> 2

◆ FORMAT(X,D)

将number X设置为格式 '#,###,###.##', 以四舍五入的方式保留到小数点后D位, 而返回结果为一个字符串。

◆ HEX(N_or_S)

如果N_OR_S 是一个数字,则返回一个 十六进制值 N 的字符串表示,在这里, N 是一个longlong (BIGINT)数。这相当于 CONV(N,10,16)。

如果N_OR_S 是一个字符串,则返回值为一个N_OR_S的十六进制字符串表示, 其中每个N_OR_S 里的每个字符被转化为两个十六进制数字。

mysql> SELECT HEX(255)

-> 'FF'

mysql> SELECT 0x616263

-> 'abc'

mysql> SELECT HEX('abc')

-> 616263

◆ INSERT(str,pos,len,newstr)

返回字符串 str, 其子字符串起始于 pos 位置和长期被字符串 newstr取代的len 字符。  如果pos 超过字符串长度,则返回值为原始字符串。假如len的长度大于其它字符串的长度,则从位置pos开始替换。若任何一个参数为null,则返回值为 NULL。

mysql> SELECT INSERT('Quadratic', 3, 4, 'What')

-> 'QuWhattic'

mysql> SELECT INSERT('Quadratic', -1, 4, 'What')

-> 'Quadratic'

mysql> SELECT INSERT('Quadratic', 3, 100, 'What')

-> 'QuWhat'

这个函数支持多字节字元。

◆ INSTR(str,substr)

返回字符串 str 中子字符串的第一个出现位置。这和LOCATE()的双参数形式相同,除非参数的顺序被颠倒。

mysql> SELECT INSTR('foobarbar', 'bar')

-> 4

mysql> SELECT INSTR('xbar', 'foobar')

-> 0

这个函数支持多字节字元,并且只有当至少有一个参数是二进制字符串时区分大小写。

◆ LCASE(str)

LCASE() 是 LOWER()的同义词。◆ LEFT(str,len)

返回从字符串str 开始的len 最左字符。

mysql> SELECT LEFT('foobarbar', 5)

-> 'fooba'

◆ LENGTH(str)

返回值为字符串str 的长度,单位为字节。一个多字节字符算作多字节。这意味着 对于一个包含5个2字节字符的字符串, LENGTH() 的返回值为 10, 而 CHAR_LENGTH()的返回值则为5。

mysql> SELECT LENGTH('text')

-> 4

◆ LOAD_FILE(file_name)

读取文件并将这一文件按照字符串的格式返回。 文件的位置必须在服务器上,你必须为文件制定路径全名,而且你还必须拥有FILE 特许权。文件必须可读取,文件容量必须小于 max_allowed_packet字节。

若文件不存在,或因不满足上述条件而不能被读取, 则函数返回值为 NULL。

mysql> UPDATE tbl_name

SET blob_column=LOAD_FILE('/tmp/picture')

WHERE id=1

◆ LOCATE(substr,str) , LOCATE(substr,str,pos)

第一个语法返回字符串 str中子字符串substr的第一个出现位置。第二个语法返回字符串 str中子字符串substr的第一个出现位置, 起始位置在pos。如若substr 不在str中,则返回值为0。

mysql> SELECT LOCATE('bar', 'foobarbar')

-> 4

mysql> SELECT LOCATE('xbar', 'foobar')

-> 0

mysql> SELECT LOCATE('bar', 'foobarbar',5)

-> 7

这个函数支持多字节字元,并且只有当至少有一个参数是二进制字符串时区分大小写。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7365499.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存