mysql函数

来源:互联网 发布:淘宝服装布光 编辑:程序博客网 时间:2024/06/05 07:52

用在SELECT和WHERE子句的函数
--------------------------------------------------------------
1 分组函数

( ... ) 括号。使用它们来强制在一个表达式的计算顺序。

--------------------------------------------------------------
2 常用的算术运算(+ - * /)

一般的算术操作符是可用的。注意在-、+和*情况下,如果两个参数是整数,结果用BIGINT(64位)精度计算!

--------------------------------------------------------------
3 位函数

| 位或
& 位与
<< 左移位一个长(BIGINT)数字
>> 右移位一个长(BIGINT)数字
~ 颠倒所有的位
BIT_COUNT(N) 返回在参数N设定的位的数量

--------------------------------------------------------------
4 逻辑运算

所有的逻辑函数返回1(TRUE)或0(FALSE)
NOT (!)
逻辑非。如果参数是0,返回1,否则返回0。例外: NOT NULL返回NULL
OR (||)
逻辑或。如果任何一个参数不是0并且不NULL,返回1。
AND (&&)
逻辑与。如果任何一个参数是0或NULL,返回0,否则返回1。

--------------------------------------------------------------
5 比较运算符

比较操作得出值1(TRUE)、0(FALSE)或NULL等结果。这些函数工作运用在数字和字符串上。当需要时,字符串自动地被变换到数字且数字到字符串(如在Perl)。

exprIN (value,...)如果expr是在IN表中的任何值,返回1,否则返回0。如果所有的值是常数,那么所有的值根据expr类型被计算和排序,然后项目的搜索是用二进制的搜索完成。这意味着如果IN值表全部由常数组成,IN是很快的。如果expr是一个大小写敏感的字符串表达式,字符串比较以大小写敏感方式执行。
expr NOT IN (value,...) 与NOT (expr IN (value,...))相同。
ISNULL(expr) 如果expr是NULL,ISNULL()返回1,否则它返回0。
COALESCE(list) 回来list中第一个非NULL的单元。
INTERVAL(N,N1,N2,N3,...) 如果N< N1,返回0,如果N<N2,返回1等等。所有的参数被当作整数。为了函数能正确地工作,它要求N1<N2<N3<...<Nn。这是因为使用二进制搜索(很快)。

--------------------------------------------------------------
6 字符串比较函数
通常,如果在字符串比较中的任何表达式是区分大小写的,比较以大小写敏感的方式执行。

exprLIKE pat [ESCAPE 'escape-char']使用SQL的简单的正规表达式比较的模式匹配。返回1(TRUE)或0(FALSE)。用LIKE,你可以在模式中使用下列2个通配符字符: %匹配任何数目的字符,甚至零个字符; _ 精确匹配一个字符
expr NOT LIKE pat [ESCAPE 'escape-char']
expr REGEXP pat
expr RLIKE pat 执行一个字符串表达式expr对一个模式pat的模式匹配。
expr NOT REGEXP pat
expr NOT RLIKE pat
STRCMP(expr1,expr2)

--------------------------------------------------------------
7 类型转换运算符
BINARY BINARY操作符强制跟随它后面的字符串为一个二进制字符串。即使列没被定义为BINARY或BLOB,这是一个强制列比较区分大小写的简易方法。

--------------------------------------------------------------
8 控制流函数
IFNULL(expr1,expr2) 如果expr1不是NULL,IFNULL()返回expr1,否则它返回expr2。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。
IF(expr1,expr2,expr3)如果expr1是TRUE(expr1<>0且expr1<>NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值,取决于它被使用的上下文。
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
第一个版本返回result,其中value=compare-value。第二个版本中如果第一个条件为真,返回result。如果没有匹配的result值,那么结果在ELSE后的result被返回。如果没有ELSE部分,那么NULL被返回。

--------------------------------------------------------------
9 数学函数
所有的数学函数在一个出错的情况下返回NULL.

- 单目减。改变参数的符号。
ABS(X) 返回X的绝对值。
SIGN(X) 返回参数的符号,为-1、0或1,取决于X是否是负数、零或正数。
MOD(N,M) % 模 (类似C中的%操作符)。返回N被M除的余数。
FLOOR(X) 返回不大于X的最大整数值。
CEILING(X) 返回不小于X的最小整数值。
ROUND(X) 返回参数X的四舍五入的一个整数。
ROUND(X,D) 返回参数X的四舍五入的有D为小数的一个数字。如果D为0,结果将没有小数点或小数部分。
EXP(X) 返回值e(自然对数的底)的X次方。
LOG(X) 返回X的自然对数。
LOG10(X) 返回X的以10为底的对数。
POW(X,Y) POWER(X,Y) 返回值X的Y次幂。
SQRT(X) 返回非负数X的平方根。
PI() 返回PI的值(圆周率)。
COS(X) 返回X的余弦, 在这里X以弧度给出。
SIN(X) 返回X的正弦值,在此X以弧度给出。
TAN(X) 返回X的正切值,在此X以弧度给出。
ACOS(X) 返回X反余弦,即其余弦值是X。如果X不在-1到1的范围,返回NULL。
ASIN(X) 返回X反正弦值,即其正弦值是X。L如果X不在-1到1的范围,返回NULL。
ATAN(X) 返回X的反正切值,即其正切值是X。
ATAN2(X,Y) 返回2个变量X和Y的反正切。它类似于计算Y/X的反正切,除了两个参数的符号被用来决定结果的象限。
COT(X) 返回X的余切。
RAND() RAND(N) 返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。
LEAST(X,Y,...) 有2和2个以上的参数,返回最小(最小值)的参数。
GREATEST(X,Y,...) 返回最大(最大值)的参数。参数使用与LEAST一样的规则进行比较。
DEGREES(X) 返回参数X,从弧度变换为角度。
RADIANS(X) 返回参数X,从角度变换为弧度。
TRUNCATE(X,D) 返回数字X,截断为D位小数。如果D为0,结果将没有小数点或小数部分。


--------------------------------------------------------------
10 字符串函数
如果结果的长度大于服务器参数max_allowed_packet,字符串值函数返回NULL。
对于针对字符串位置的操作,第一个位置被标记为1。

ASCII(str) 返回字符串str的最左面字符的ASCII代码值。如果str是空字符串,返回0。如果str是NULL,返回NULL。
ORD(str) 如果字符串str最左面字符是一个多字节字符,通过以格式((first byte ASCIIcode)*256+(second byte ASCII code))[*256+third byte ASCIIcode...]返回字符的ASCII代码值来返回多字节字符代码。如果最左面的字符不是一个多字节字符。返回与ASCII()函数返回的相同值。
CONV(N,from_base,to_base)在不同的数字基之间变换数字。返回数字N的字符串数字,从from_base基变换为to_base基,如果任何参数是NULL,返回NULL。参数N解释为一个整数,但是可以指定为一个整数或一个字符串。最小基是2且最大的基是36。如果to_base是一个负数,N被认为是一个有符号数,否则,N被当作无符号数。 CONV以64位点精度工作。
BIN(N) 返回二进制值N的一个字符串表示,在此N是一个长整数(BIGINT)数字,这等价于CONV(N,10,2)。如果N是NULL,返回NULL。
OCT(N) 返回八进制值N的一个字符串的表示,在此N是一个长整型数字,这等价于CONV(N,10,8)。如果N是NULL,返回NULL。
HEX(N) 返回十六进制值N一个字符串的表示,在此N是一个长整型(BIGINT)数字,这等价于CONV(N,10,16)。如果N是NULL,返回NULL。
CHAR(N,...) CHAR()将参数解释为整数并且返回由这些整数的ASCII代码字符组成的一个字符串。NULL值被跳过。
CONCAT(str1,str2,...) 返回来自于参数连结的字符串。如果任何参数是NULL,返回NULL。可以有超过2个的参数。一个数字参数被变换为等价的字符串形式。
LENGTH(str), OCTET_LENGTH(str), CHAR_LENGTH(str), CHARACTER_LENGTH(str) 返回字符串str的长度。
LOCATE(substr,str), POSITION(substr IN str) 返回子串substr在字符串str第一个出现的位置,如果substr不是在str里面,返回0.
LOCATE(substr,str,pos) 返回子串substr在字符串str第一个出现的位置,从位置pos开始。如果substr不是在str里面,返回0。
INSTR(str,substr) 返回子串substr在字符串str中的第一个出现的位置。这与有2个参数形式的LOCATE()相同,除了参数被颠倒。
LPAD(str,len,padstr) 返回字符串str,左面用字符串padstr填补直到str是len个字符长。
RPAD(str,len,padstr) 返回字符串str,右面用字符串padstr填补直到str是len个字符长。
LEFT(str,len) 返回字符串str的最左面len个字符。
RIGHT(str,len) 返回字符串str的最右面len个字符。
SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len),MID(str,pos,len) 从字符串str返回一个len个字符的子串,从位置pos开始。使用FROM的变种形式是ANSI SQL92语法。
SUBSTRING(str,pos), SUBSTRING(str FROM pos) 从字符串str的起始位置pos返回一个子串。
SUBSTRING_INDEX(str,delim,count)返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数)的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)。
LTRIM(str) 返回删除了其前置空格字符的字符串str。
RTRIM(str) 返回删除了其拖后空格字符的字符串str。
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)返回字符串str,其所有remstr前缀或后缀被删除了。如果没有修饰符BOTH、LEADING或TRAILING给出,BOTH被假定。如果remstr没被指定,空格被删除。
SOUNDEX(str)返回str的一个同音字符串。听起来“大致相同”的2个字符串应该有相同的同音字符串。一个“标准”的同音字符串长是4个字符,但是SOUNDEX()函数返回一个任意长的字符串。你可以在结果上使用SUBSTRING()得到一个“标准”的同音串。所有非数字字母字符在给定的字符串中被忽略。所有在A-Z之外的字符国际字母被当作元音。
SPACE(N) 返回由N个空格字符组成的一个字符串。
REPLACE(str,from_str,to_str) 返回字符串str,其字符串from_str的所有出现由字符串to_str代替。
REPEAT(str,count) 返回由重复countTimes次的字符串str组成的一个字符串。如果count <= 0,返回一个空字符串。如果str或count是NULL,返回NULL。
REVERSE(str) 返回颠倒字符顺序的字符串str。
INSERT(str,pos,len,newstr) 返回字符串str,在位置pos起始的子串且len个字符长得子串由字符串newstr代替。
ELT(N,str1,str2,str3,...) 如果N= 1,返回str1,如果N= 2,返回str2,等等。如果N小于1或大于参数个数,返回NULL。ELT()是FIELD()反运算。
FIELD(str,str1,str2,str3,...) 返回str在str1, str2, str3, ...清单的索引。如果str没找到,返回0。FIELD()是ELT()反运算。
FIND_IN_SET(str,strlist)如果字符串str在由N子串组成的表strlist之中,返回一个1到N的值。一个字符串表是被“,”分隔的子串组成的一个字符串。如果第一个参数是一个常数字符串并且第二个参数是一种类型为SET的列,FIND_IN_SET()函数被优化而使用位运算!如果str不是在strlist里面或如果strlist是空字符串,返回0。如果任何一个参数是NULL,返回NULL。如果第一个参数包含一个“,”,该函数将工作不正常。
MAKE_SET(bits,str1,str2,...) 返回一个集合(包含由“,”字符分隔的子串组成的一个字符串),由相应的位在bits集合中的的字符串组成。str1对应于位0,str2对应位1,等等。在str1, str2, ...中的NULL串不添加到结果中。
EXPORT_SET(bits,on,off,[separator,[number_of_bits]])返回一个字符串,在这里对于在“bits”中设定每一位,你得到一个“on”字符串,并且对于每个复位(reset)的位,你得到一个“off”字符串。每个字符串用“separator”分隔(缺省“,”),并且只有“bits”的“number_of_bits” (缺省64)位被使用。
LCASE(str) LOWER(str) 返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成小写。该函数对多字节是可靠的。
UCASE(str) UPPER(str) 返回字符串str,根据当前字符集映射(缺省是ISO-8859-1 Latin1)把所有的字符改变成大写。该函数对多字节是可靠的。
LOAD_FILE(file_name)读入文件并且作为一个字符串返回文件内容。文件必须在服务器上,你必须指定到文件的完整路径名,而且你必须有file权限。文件必须所有内容都是可读的并且小于max_allowed_packet。如果文件不存在或由于上面原因之一不能被读出,函数返回NULL。


--------------------------------------------------------------
11 日期和时间函数
DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准
WEEKDAY(date) 返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
DAYOFMONTH(date) 返回date的月份中日期,在1到31范围内。
DAYOFYEAR(date) 返回date在一年中的日数, 在1到366范围内。
MONTH(date) 返回date的月份,范围1到12。
DAYNAME(date) 返回date的星期名字。
MONTHNAME(date) 返回date的月份名字。
QUARTER(date) 返回date一年中的季度,范围1到4。
WEEK(date) WEEK(date,first)对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。2个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。
YEAR(date) 返回date的年份,范围在1000到9999。
HOUR(time) 返回time的小时,范围是0到23。
MINUTE(time) 返回time的分钟,范围是0到59。
SECOND(time) 回来time的秒数,范围是0到59。
PERIOD_ADD(P,N) 增加N个月到阶段P(以格式YYMM或YYYYMM)。以格式YYYYMM返回值。注意阶段参数P不是日期值。
PERIOD_DIFF(P1,P2) 返回在时期P1和P2之间月数,P1和P2应该以格式YYMM或YYYYMM。注意,时期参数P1和P2不是日期值。
DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)ADDDATE(date,INTERVAL expr type) SUBDATE(date,INTERVAL expr type)这些功能执行日期运算。
TO_DAYS(date) 给出一个日期date,返回一个天数(从0年的天数)。
FROM_DAYS(N) 给出一个天数N,返回一个DATE值。
DATE_FORMAT(date,format) 根据format字符串格式化date值。
TIME_FORMAT(time,format) 这象上面的DATE_FORMAT()函数一样使用,但是format字符串只能包含处理小时、分钟和秒的那些格式修饰符。其他修饰符产生一个NULL值或0。
CURDATE() 以'YYYY-MM-DD'或YYYYMMDD格式返回今天日期值,取决于函数是在一个字符串还是数字上下文被使用。
CURTIME() 以'HH:MM:SS'或HHMMSS格式返回当前时间值,取决于函数是在一个字符串还是在数字的上下文被使用。
NOW() SYSDATE() 以'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS格式返回当前的日期和时间,取决于函数是在一个字符串还是在数字的上下文被使用。
UNIX_TIMESTAMP() ,UNIX_TIMESTAMP(date)如果没有参数调用,返回一个Unix时间戳记(从'1970-01-0100:00:00'GMT开始的秒数)。如果UNIX_TIMESTAMP()用一个date参数被调用,它返回从'1970-01-0100:00:00'GMT开始的秒数值。date可以是一个DATE字符串、一个DATETIME字符串、一个TIMESTAMP或以YYMMDD或YYYYMMDD格式的本地时间的一个数字。
FROM_UNIXTIME(unix_timestamp) 以'YYYY-MM-DDHH:MM:SS'或YYYYMMDDHHMMSS格式返回unix_timestamp参数所表示的值,取决于函数是在一个字符串还是或数字上下文中被使用。FROM_UNIXTIME(unix_timestamp,format) 返回表示 Unix时间标记的一个字符串,根据format字符串格式化。format可以包含与DATE_FORMAT()函数列出的条目同样的修饰符。
SEC_TO_TIME(seconds) 返回seconds参数,变换成小时、分钟和秒,值以'HH:MM:SS'或HHMMSS格式化,取决于函数是在一个字符串还是在数字上下文中被使用。
TIME_TO_SEC(time) 返回time参数,转换成秒。

--------------------------------------------------------------
12 其他函数
DATABASE() 返回当前的数据库名字。
USER() SYSTEM_USER() SESSION_USER() 返回当前MySQL用户名。
PASSWORD(str) 从纯文本口令str计算一个口令字符串。该函数被用于为了在user授权表的Password列中存储口令而加密MySQL口令。
ENCRYPT(str[,salt]) 使用Unix crypt()系统调用加密str。salt参数应该是一个有2个字符的字符串。
ENCODE(str,pass_str) 使用pass_str作为口令加密str。为了解密结果,使用DECODE()。结果是一个二进制字符串,如果你想要在列中保存它,使用一个BLOB列类型。
DECODE(crypt_str,pass_str) 使用pass_str作为口令解密加密的字符串crypt_str。crypt_str应该是一个由ENCODE()返回的字符串。
MD5(string) 对字符串计算MD5校验和。值作为一个32长的十六进制数字被返回可以,例如用作哈希(hash)键。
LAST_INSERT_ID([expr]) 返回被插入一个AUTO_INCREMENT列的最后一个自动产生的值。
FORMAT(X,D) 格式化数字X为类似于格式'#,###,###.##',四舍五入到D为小数。如果D为0,结果将没有小数点和小数部分。
VERSION() 返回表明MySQL服务器版本的一个字符串。
GET_LOCK(str,timeout)试图获得由字符串str给定的一个名字的锁定,第二个timeout为超时。如果锁定成功获得,返回1,如果尝试超时了,返回0,或如果发生一个错误,返回NULL(例如从存储器溢出或线程用mysqladminkill被杀死)。当你执行RELEASE_LOCK()时、执行一个新的GET_LOCK()或线程终止时,一个锁定被释放。该函数可以用来实现应用锁或模拟记录锁,它阻止其他客户用同样名字的锁定请求;赞成一个给定的锁定字符串名字的客户可以使用字符串执行子协作建议的锁定。
RELEASE_LOCK(str)释放字符串str命名的通过GET_LOCK()获得的锁。如果锁被释放,返回1,如果锁没被这个线程锁定(在此情况下锁没被释放)返回0,并且如果命名的锁不存在,返回NULL。如果锁从来没有通过调用GET_LOCK()获得或如果它已经被释放了,锁将不存在。
BENCHMARK(count,expr) BENCHMARK()函数重复countTimes次执行表达式expr,它可以用于计时MySQL处理表达式有多快。结果值总是0。意欲用于mysql客户,它报告查询的执行时间。

--------------------------------------------------------------
13 与GROUP BY子句一起使用的函数
COUNT(expr) 返回由一个SELECT语句检索出来的行的非NULL值的数目。
COUNT(DISTINCT expr,[expr...]) 返回一个不同值的数目。
AVG(expr) 返回expr的平均值。
MIN(expr) MAX(expr) 返回expr的最小或最大值。
SUM(expr) 返回expr的和。注意,如果返回的集合没有行,它返回NULL!
STD(expr) STDDEV(expr) 返回expr标准差(deviation)。这是对 ANSI SQL 的扩展。该函数的形式STDDEV()是提供与Oracle的兼容性。
BIT_OR(expr) 返回expr里所有位的位或。
BIT_AND(expr) 返回expr里所有位的位与。