技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> MySQL --> MySQL 内部函数简介

MySQL 内部函数简介

浏览:2388次  出处信息

    算数运算子

    +, -, *, /

    除于 0 会等于 NULL。

    比较运算子

    任何东西跟 NULL 比较会等于 NULL。

    比较字符串通常不需要注意大小写,如果要比较大小写,用 BINARY 关键词。

    程序代码:

    SELECT *

    FROM department

    WHERE name = BINARY \'marketing\';

    程序代码:

    =      相等

    != 或 <>    不相等

    <      小于

    <=     小或等于

    >      大于

    >=     大或等于

    n BETWEEN

    min AND max    测试范围

    n IN (set)    set 可以是一系列的数值或子查询。

    <=>    可以比较 NULL,如果比较两个 NULL 会传回 1。

    n IS NULL    测试 n 是否 NULL。

    ISNULL(n)    测试 n 是否 NULL。

    逻辑运算子

    传回的值有 1 (true), 0 (false, 或 NULL。

    任何不是 0 或不是 NULL 的值都是 true。

    程序代码:

    AND 或 && n && m       和

                 true && true = true

                 false && anything = false

                 其它会等于 NULL

    OR 或 ||   n || m       或

                 true || anything = true

                 NULL || false = NULL

                 NULL || NULL = NULL

                 false || false = false

    NOT 或 !    NOT n     不是

                 !true = false

                 !false = true

                 !NULL = NULL

    XOR    n XOR m      不包含的 OR

                 true XOR true = false

                 true XOR false = true

                 false XOR true = true

                 NULL XOR n = NULL

                 n XOR NULL = NULL

    控制流向的函式

    IF (e1, e2, e3)

    如果 e1 是 true,IF 会传回 e2,不然会传回 e3。

    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

    程序代码:

    SELECT workdate, CASE

      WHEN workdate < 2000-01-01 THEN "archived"

      WHEN workdate < 2003-01-01 THEN "old"

      ELSE "current"

      END

    FROM assignment;

    字符串函式

    concat(s1, s2, ...) - 连接字符串 s1 和 s2...

    conv(n, original_base, new_base) - 转换数字 n 从本来的 base 到新的 base

    length(s) - 找字符串的长度

    load_file(filename) - 依照字符串传回档案的内容

    locate(needle, haystack, position) - 传回 needle 字符串的开始位置,在 haystack 字符串里,从 position 开始

    lower(s) and upper(s) - 转换 s 到小写或大写

    quote(s) - 跳脱 s 字符串,让它可以安全输入数据库

    replace(target, find, replace) - 传回 target 字符串,将 find 字符串覆盖成 replace 字符串

    soundex(s) - 传回跟 s 类似的 soundex 字符串。soundex 是字符串的发音

    substring(s, position, length) - 传回字符串里的字符串,s 是本来的字符串,position 是开始的位置,length 是传回的字数

    trim(s) - 移除开头跟字尾的空格符。也可以用 rtrim() 或 ltrim()

    字符串比较的函式

    LIKE - 利用通配字符来进行比较

    RLIKE - 利用正规表示法来进行比较

    STRCMP - 比较字符串,类似 C 里面的 strcmp()

    MATCH - 进行 full-text 比较

    利用通配字符来进行比较

    程序代码:

    SELECT *

    FROM department

    WHERE name LIKE \'%research%\';

    % 会吻合任何字数,包括 0。

    _ 会吻合单一字数, _at 会吻合 cat, mat, bat...

    利用正规表示法来进行比较

    RLIKE 可以用来吻合正规表示法。

    \'cat\' 会吻合 \'catacomb\' 和 \'the cat sat on the mat\'。

    如果只要吻合 \'cat\',用 \'^cat$\'。

    ^ 表示在吻合的字符串开头是 \'cat\'。

    $ 表示在吻合的字符串最后是 \'cat\'。

    . 可以用来代表通配字符,\'.at\' 会吻合 \'cat\', \'bat\', \'mat\'。

    * 表示字符可以出现零或多次,\'n*\' 会吻合 \'\', \'nn\', \'nnn\'。

    () 会归类字符,\'(cat)*\' 会吻合 \'\', \'cat\', \'catcat\', \'catcatcat\'。

    .* 会吻合任何字或字符串。

    + 表示在他之后的字或字符串会重复一或多次。

    ? 表示吻合一或零次。

    列出特定的范围,\'(cat)(2,4)\' 会吻合 \'catcat\', \'catcatcat\', 和 \'catcatcatcat\'。

    [] 可以列出一系列的文字,\'[a-z]\' 会吻合任何字母,\'[a-z]*\' 会吻合任何数量的字母。

    文字类别,[[:alnum:]] 会吻合任何字母和数字的文字。

    程序代码:

    SELECT *

    FROM department

    WHERE name RLIKE \'an\';

    这会吻合全部有包括 \'an\' 的部门。

    用 STRCMP() 来比较字符串

    STRCMP(s1, s2)

    如果字符串相同会传回 0,-1 如果 s1 比 s2 小 (s1 比 s2 早出现)。

    1 如果 s1 比 s2 大 (s1 比 s2 晚出现)。

    程序代码:

    SELECT STRCMP(\'cat\', \'cat\');

    // 传回 0

    SELECT STRCMP(\'cat\', \'dog\');

    // 传回 -1

    SELECT STRCMP(\'cat\', \'ant\');

    // 传回 1

    数字函式

    abs(n) 传回 n 的正数

    ceiling(n) n rounded up to the nearest integer

    floor(n) n rounded down to the nearest integer

    mod(n,m) 和 div 这两个函式会将 n 除于 m。div 传回商数,mod() 会传回剩余数。

    power(n,m) n to the power of m

    rand(n) 传回 0 到 1 的随意数。n 可以不提供,如果提供会用来产生随意数。

    相同的 n 会产生相同的随意数。

    round(n[,d]) n rounded to the nearest integer. if supply d, n will be rounded to d decimal places.

    sqrt(n) 传回 n 的平方

    mod() 可以是 mod(9,2) 或 9 mod 2 或 9 % 2。

    div 只能用 9 div 2。

    程序代码:

    SELECT 9 mod 2;

    // 传回 1

    SELECT 9 div 2;

    // 传回 4

    日期和时间函式

    adddate(date, INTERVAL n type) 和 subdate(date, INTERVAL n type)

    这些函式可以用来增加和减少日期。从 date 的日期开始计算,然后增加或减少 INTERVAL 后的日期范围。

    你必须提供 n 和他的类型。类型可以是 SECOND, MINUTE, HOUR, DAY, MONTH, YEAR, MINUTE:SECOND (m:s),

    HOUR:MINUTE (h:m), DAY_HOUR(d h), YEAR_MONTH (y-m), HOUR_SECOND (h:m:s), DAY_MINUTE (d h:m),

    DAY_SECOND (d h:m:s)。

    curdate(), curtime(), now()

    这些函式会传回目前的日期,目前的时间,还有时间和日期。

    date_format(date, format) 和 time_format(time, format)

    这些可以用来改变日期和时间的格式。

    你必须提供格式的字符串,譬如说 date_format(workdate, \'%W %D of %M, %Y\'),

    这会给你 \'Monday 16th of June, 2003)。

    全部可用的格式请看 MySQL 的手册。

    dayname(date)

    传回日期的名称,例如 Monday。

    extract(type FROM date)

    传回 date 的日期,譬如说 YEAR,他就会传回那个日期的年数。

    函式可用的类型跟 adddate() 和 subdate() 的类型相同。

    unix_timestamp([date])

    传回目前的 Unix 时间。如果跟 date 一起使用,传回的日期会从 date 的日期开始计算。

    范例:

    程序代码:

    SELECT adddate("1999-01-01", INTERVAL "1-6" YEAR_MONTH);

    // 传回 2000-07-01

    SELECT unix_timestamp(adddate("1999-01-01", INTERVAL "1-6" YEAR_MONTH);

    // 传回 962373600

    可以用 PHP 的 date() 函式来将 Unix 的时间格式化。

    cast 函式

    cast 可以用来改变类型,用 cast() 和 convert() 函式。

    两个函式相同,但是不同的语法构造。

    cast(expression AS type)

    convert(expression, type)

    cast() 是依照 ANSI 的规格,convert() 是依照 ODBC 的规格。

    类型可以是 BINARY, CHAR, DATE, DATETIME, SIGNED (INTEGER), 和 UNSIGNED (INTEGER)。

    通常 MySQL 会自动帮你改变类型。

    其它函式

    benchmark(count, expression)

    这个函式是用来测试查询的速度,只会传回 0 值。

    encrypt(s[,salt])

    将 s 加密用 Unix 的加密系统。salt 字符串是两个字符的字符串,可以不用。

    如果没有 crypt 功能,像在 Windows 系统,这个函式会传回 NULL。

    found_rows()

    传回字段的数量,如果没有用 LIMIT。

    只有在 SELECT 里使用 SQL_CALC_FOUND_ROWS 才能用这个函式。

    last_insert_id()

    传回最后产生的 AUTO_INCREMENT 值。

    md5(s)

    传回 128bit MD5 的加密字符串。

    password(s)

    计算 s 的密码,不建议用这个函式来储存密码。

    用于 GROUP BY 的函式

    这些还是专门为了 GROUP BY 而写的。

    avg(column) - 传回字段的平均值

    count(column) - 传回字段的数量

    min(column) - 传回字段的最小值

    max(column) - 传回字段的最大值

    std(column) - 传回字段的标准差

    sum(column) - 传回字段的总数

建议继续学习:

  1. 不定参数的应用 function(fmt, …)    (阅读:3922)
  2. 函数式编程    (阅读:3592)
  3. JavaScript的5种调用函数的方法    (阅读:3472)
  4. C 语言中统一的函数指针    (阅读:2972)
  5. C语言函数实现的另类方法    (阅读:2833)
  6. 关于在函数调用时传递string引用的必要性    (阅读:2771)
  7. 深入理解PHP之匿名函数    (阅读:2550)
  8. PHP中htmlentities()和htmlspecialchars()这两个函数的区别    (阅读:2381)
  9. 情人节特献:有心之函数必然就有分手函数    (阅读:2347)
  10. 一个想当然造成的错误(函数引用参数的一个问题)    (阅读:2363)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1