zoukankan      html  css  js  c++  java
  • MySQL

    MySQL操作符和函数

    1. 比较函数和操作符

      1. <=>

      2. IS [NOT] TRUE | FALSE | UNKNOWN

      3. IS NULL | IS NOT NULL

      4. COALESCE(value,...)

      5. LEAST(value1,value2,...)

      6. GREATEST(value1,value2,...)

      7. ISNULL(expr)

      8. INTERVAL(N,N1,N2,N3,...)

    2. 逻辑操作符

      1. NOT !

      2. AND &&

      3. OR ||

      4. XOR

    3. 控制流程函数

      1. CASE ...WHEN ... THEN ...ELSE ...END

      2. IF(expr1,expr2,expr3)

      3. IFNULL(expr1,expr2)

      4. NULLIF(expr1,expr2)

    4. 字符串函数

      1. ASCII(str)

      2. HEX(N_or_S)

      3. UNHEX(str)

      4. OCT(N)

      5. OCTET_LENGTH(str)

      6. BIN(N)

      7. BIT_LENGTH(str)

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

      9. CHAR_LENGTH(str) | CHARACTER_LENGTH(str)

      10. CONCAT(str1,str2,...)

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

      12. CONV(N,from_base,to_base)

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

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

      15. FIND_IN_SET(str,strlist)

      16. INSERT(str,pos,len,newstr)

      17. INSTR(str,substr)

      18. UCASE(str) | UPPER(str)

      19. LCASE(str) | LOWER(str)

      20. LEFT(str,len)

      21. RIGHT(str,len)

      22. LOCATE(substr,str) , LOCATE(substr,str,pos)

      23. LPAD(str,len,padstr)

      24. RPAD(str,len,padstr)

      25. LTRIM(str)

      26. RTRIM(str)

      27. TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str)

      28. MID(str,pos,len)

      29. ORD(str)

      30. POSITION(substr IN str)

      31. REPEAT(str,count)

      32. REVERSE(str)

      33. SPACE(N)

      34. SUBSTR() | SUBSTRING()

      35. SUBSTRING_INDEX(str,delim,count)

      36. COMPRESS(string_to_compress)

      37. UNCOMPRESS(string_to_uncompress)

    5. 字符串比较函数

    比较函数和操作符

    • <=>

    NULL-safe equal.这个操作符<=>和=操作符执行相同的比较操作,不过在两个操作码均为NULL时,其所得值为1而不为NULL,而当一个操作码为NULL时,其所得值为0而不为NULL。

    mysql> SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;

            -> 1, 1, 0

    mysql> SELECT 1 = 1, NULL = NULL, 1 = NULL;

            -> 1, NULL, NULL

    • IS [NOT] TRUE | FALSE | UNKNOWN

    根据一个布尔值来检验一个值,在这里,布尔值可以是TRUE、FALSE或UNKNOWN。

    mysql> SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;

            -> 1, 1, 1

    mysql> SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;

            -> 1, 1, 0

    • IS NULL | IS NOT NULL

    检验一个值是否为 NULL。

    mysql> SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;

            -> 0, 0, 1

    mysql> SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;

            -> 1, 1, 0

    • COALESCE(value,...)

    返回值为列表当中的第一个非 NULL值,全为NULL,则返回值为 NULL 。

    mysql> SELECT COALESCE(NULL,1);

            -> 1

    mysql> SELECT COALESCE(NULL,NULL,NULL);

            -> NULL

    • LEAST(value1,value2,...)

    在有两个或多个参数的情况下, 返回值为最小 (最小值) 参数。用一下规则将自变量进行对比:

      • 假如返回值被用在一个 INTEGER 语境中,或是所有参数均为整数值,则将其作为整数值进行比较。
      • 假如返回值被用在一个 REAL语境中,或所有参数均为实值,则将其作为实值进行比较。
      • 假如任意一个参数是一个区分大小写的字符串,则将参数按照区分大小写的字符串进行比较。
      • 在其它情况下,将参数作为区分大小写的字符串进行比较。

    假如任意一个自变量为NULL,则 LEAST()的返回值为NULL 。

    mysql> SELECT LEAST(2,0);

            -> 0

    mysql> SELECT LEAST(34.0,3.0,5.0,767.0);

            -> 3.0

    mysql> SELECT LEAST('B','A','C');

            -> 'A'

    • GREATEST(value1,value2,...)

    当有2或多个参数时,返回值为最大(最大值的)参数。比较参数所依据的规律同LEAST()相同。

    mysql> SELECT GREATEST(2,0);

            -> 2

    mysql> SELECT GREATEST(34.0,3.0,5.0,767.0);

            -> 767.0

    mysql> SELECT GREATEST('B','A','C');

            -> 'C'

    • ISNULL(expr)

    expr 为NULL,那么ISNULL() 的返回值为 1,否则返回值为 0。

    mysql> SELECT ISNULL(1+1);

            -> 0

    mysql> SELECT ISNULL(1/0);

            -> 1

    ISNULL() 函数同 IS NULL比较操作符具有一些相同的特性。请参见有关IS NULL 的说明。

    • INTERVAL(N,N1,N2,N3,...)

    假如N < N1则返回值为0;假如N < N2,则返回值为1。。。以此类推, 如果N 为NULL,则返回值为 -1 。所有的参数均按照整数处理。为了这个函数的正确运行,必须满足 N1 < N2 < N3 < ……< Nn 。其原因是使用了二分查找(极快速)。

    mysql> SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);

            -> 3

    mysql> SELECT INTERVAL(10, 1, 10, 100, 1000);

            -> 2

    mysql> SELECT INTERVAL(22, 23, 30, 44, 200);

            -> 0

    逻辑操作符

    在SQL中,所有逻辑 操作符的求值所得结果均为 TRUE、FALSE或 NULL (UNKNOWN)。在 MySQL中,它们体现为  1 (TRUE)、 0 (FALSE)和 NULL。其大多数都与不同的数据库SQL通用,然而一些服务器对TRUE的返回值可能是任意一个非零值。

    • NOT !

    逻辑 NOT。当操作数为0 时,所得值为 1 ;当操作数为非零值时,所得值为  0 ,而当操作数为NOT NULL时,所得的返回值为 NULL。

    mysql> SELECT NOT 10;

            -> 0

    mysql> SELECT NOT 0;

            -> 1

    mysql> SELECT NOT NULL;

            -> NULL

    mysql> SELECT ! (1+1);

            -> 0

    mysql> SELECT ! 1+1;

            -> 1

    最后一个例子产生的结果为 1,原因是表达式的计算方式和(!1)+1相同。

    • AND &&

    逻辑AND。当所有操作数均为非零值、并且不为NULL时,计算所得结果为  1 ,当一个或多个操作数为0 时,所得结果为 0 ,其余情况返回值为 NULL 。

    mysql> SELECT 1 && 1;

            -> 1

    mysql> SELECT 1 && 0;

            -> 0

    mysql> SELECT 1 && NULL;

            -> NULL

    mysql> SELECT 0 && NULL;

            -> 0

    mysql> SELECT NULL && 0;

            -> 0

    • OR ||

    逻辑 OR。当两个操作数均为非 NULL值时,如有任意一个操作数为非零值,则结果为1,否则结果为0。当有一个操作数为NULL时,如另一个操作数为非零值,则结果为1,否则结果为 NULL 。假如两个操作数均为  NULL,则所得结果为NULL。

    mysql> SELECT 1 || 1;

            -> 1

    mysql> SELECT 1 || 0;

            -> 1

    mysql> SELECT 0 || 0;

            -> 0

    mysql> SELECT 0 || NULL;

            -> NULL

    mysql> SELECT 1 || NULL;

            -> 1

    • XOR

    逻辑XOR。当任意一个操作数为 NULL时,返回值为NULL。对于非 NULL 的操作数,假如一个奇数操作数为非零值,则计算所得结果为  1 ,否则为  0 。

    mysql> SELECT 1 XOR 1;

            -> 0

    mysql> SELECT 1 XOR 0;

            -> 1

    mysql> SELECT 1 XOR NULL;

            -> NULL

    mysql> SELECT 1 XOR 1 XOR 1;

            -> 1

    a XOR b 的计算等同于  (a AND (NOT b)) OR ((NOT a)和 b)。

    控制流程函数

    • 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

    如果没有匹配的结果值,则返回结果为ELSE后的结果,如果没有ELSE 部分,则返回值为 NULL。

    mysql> SELECT CASE 1 WHEN 1 THEN 'one'

        ->     WHEN 2 THEN 'two' ELSE 'more' END;

            -> 'one'

    mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;

            -> 'true'

    mysql> SELECT CASE BINARY 'B'

        ->     WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;

            -> NULL

    一个CASE表达式的默认返回值类型是任何返回值的相容集合类型,但具体情况视其所在语境而定。如果用在字符串语境中,则返回结果味字符串。如果用在数字语境中,则返回结果为十进制值、实值或整数值

    • IF(expr1,expr2,expr3)

    如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()的返回值为expr2; 否则返回值则为 expr3。IF() 的返回值为数字值或字符串值,具体情况视其所在语境而定。

    mysql> SELECT IF(1>2,2,3);

            -> 3

    mysql> SELECT IF(1<2,'yes ','no');

            -> 'yes'

    mysql> SELECT IF(STRCMP('test','test1'),'no','yes');

            -> 'no'

    如果expr2expr3中只有一个明确是 NULL,则IF() 函数的结果类型为非NULL表达式的结果类型。

    expr1 作为一个整数值进行计算,就是说,假如你正在验证浮点值或字符串值, 那么应该使用比较运算进行检验。

    mysql> SELECT IF(0.1,1,0);

            -> 0

    mysql> SELECT IF(0.1<>0,1,0);

            -> 1

    在所示的第一个例子中,IF(0.1)的返回值为0,原因是 0.1 被转化为整数值,从而引起一个对 IF(0)的检验。这或许不是你想要的情况。在第二个例子中,比较检验了原始浮点值,目的是为了了解是否其为非零值。比较结果使用整数。

    • IFNULL(expr1,expr2)

    假如expr1 不为 NULL,则 IFNULL() 的返回值为 expr1; 否则其返回值为 expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

    mysql> SELECT IFNULL(1,0);

            -> 1

    mysql> SELECT IFNULL(NULL,10);

            -> 10

    mysql> SELECT IFNULL(1/0,10);

            -> 10

    mysql> SELECT IFNULL(1/0,'yes');

            -> 'yes'

    • NULLIF(expr1,expr2)

    如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。这和CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。

    mysql> SELECT NULLIF(1,1);

            -> NULL

    mysql> SELECT NULLIF(1,2);

            -> 1

    注意,如果参数不相等,则 MySQL 两次求得的值为 expr1 。

    字符串函数

    • 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

    • 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

    • UNHEX(str)

    执行从HEX(str)的反向操作。就是说,它将参数中的每一对十六进制数字理解为一个数字,并将其转化为该数字代表的字符。结果字符以二进制字符串的形式返回。

    mysql> SELECT UNHEX('4D7953514C');

            -> 'MySQL'

    mysql> SELECT 0x4D7953514C;

            -> 'MySQL'

    mysql> SELECT UNHEX(HEX('string'));

            -> 'string'

    mysql> SELECT HEX(UNHEX('1267'));

            -> '1267'

    • OCT(N)

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

    mysql> SELECT OCT(12);

            -> '14'

    • OCTET_LENGTH(str)

    OCTET_LENGTH() 是 LENGTH()的同义词。

    • BIN(N)

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

    mysql> SELECT BIN(12);

            -> '1100'

    • BIT_LENGTH(str)

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

    mysql> SELECT BIT_LENGTH('text');

            -> 32

    mysql> SELECT BIT_LENGTH('我');

            -> 24

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

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

    mysql> SELECT CHAR(0x65);

            -> 'e'

    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):

    select HEX('MySQL');#4D7953514C
    select  CONV('4D',16,10) ;#77
    select  CONV('79',16,10) ;#121
    select  CONV('53',16,10) ;#83
    select  CONV('51',16,10) ;#81
    select  CONV('4C',16,10) ;#76
    SELECT CHAR(77,121,83,81,'76');#MySQL

    • CHAR_LENGTH(str) | CHARACTER_LENGTH(str)

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

    mysql> SELECT CHAR_LENGTH('我们是朋友');

            -> 5

    mysql> SELECT CHARACTER_LENGTH('我们是朋友');

            -> 5

    mysql> SELECT LENGTH('我们是朋友');

            -> 15

    • 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'

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

            -> NULL

    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);#6E=6*18+14=122

            -> '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'

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

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

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

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

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

            -> 3

    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不在strliststrlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

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

            -> 2

    • INSERT(str,pos,len,newstr)

    返回字符串 str, 其子字符串起始于 pos 位置,长度为len被字符串 newstr取代后的字符。 如果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

    • UCASE(str)

    UCASE()是UPPER()的同义词。

    • LCASE(str)

    LCASE() 是 LOWER()的同义词。

    • LEFT(str,len)

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

    mysql> SELECT LEFT('foobarbar', 5);

          -> 'fooba'

    • RIGHT(str,len)

    从字符串str 开始,返回最右len 字符。

    mysql> SELECT RIGHT('foobarbar', 4);

            -> 'rbar'

    • 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

    • LPAD(str,len,padstr)

    返回字符串 str, 其左边由字符串padstr 填补到len 字符长度。假如str 的长度大于len, 则返回值被缩短至 len 字符。

    mysql> SELECT LPAD('hi',4,'??');

            -> '??hi'

    mysql> SELECT LPAD('hi',1,'??');

            -> 'h'

    • RPAD(str,len,padstr)

    返回字符串str, 其右边被字符串 padstr填补至len 字符长度。假如字符串str 的长度大于 len,则返回值被缩短到与 len 字符相同长度。

    mysql> SELECT RPAD('hi',5,'?');

            -> 'hi???'

    mysql> SELECT RPAD('hi',1,'?');

            -> 'h'

    • LTRIM(str)

    返回字符串 str ,其引导空格字符被删除。

    mysql> SELECT LTRIM('  barbar');

            -> 'barbar'

    • RTRIM(str)

    返回字符串 str ,结尾空格字符被删去。

    mysql> SELECT RTRIM('barbar   ');

            -> 'barbar'

    • TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str)

    返回字符串 str , 其中所有remstr 前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH 。 remstr 为可选项,在未指定情况下,可删除空格。

    mysql> SELECT TRIM('  bar   ');

            -> 'bar'

    mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');

            -> 'barxxx'

    mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');

            -> 'bar'

    mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');

            -> 'barx'

    • MID(str,pos,len)

    MID(str,pos,len) 是 SUBSTRING(str,pos,len)的同义词。

    • ORD(str)

    若字符串str 的最左字符是一个多字节字符,则返回该字符的代码, 代码的计算通过使用以下公式计算其组成字节的数值而得出:

    (1st byte code)
    + (2nd byte code × 256)
    + (3rd byte code × 256

    2

    ) ...

    mysql> SELECT ORD('我');==SELECT CONV(HEX('我'),16,10)

            -> 15108241

    • POSITION(substr IN str)

    POSITION(substr IN str)是 LOCATE(substr,str)同义词。

    • REPEAT(str,count)

    返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。 若 count <= 0,则返回一个空字符串。若strcount 为 NULL,则返回 NULL 。

    • REVERSE(str)

    返回字符串 str ,顺序和字符顺序相反。

    mysql> SELECT REVERSE('abc');

            -> 'cba'

    • SPACE(N)

    返回一个由N 间隔符号组成的字符串。

    mysql> SELECT SPACE(6);

            -> '      '

    • SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)

    不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。

    mysql> SELECT SUBSTRING('Quadratically',5);

            -> 'ratically'

    mysql> SELECT SUBSTRING('foobarbar' FROM 4);

            -> 'barbar'

    mysql> SELECT SUBSTRING('Quadratically',5,6);

            -> 'ratica'      

    mysql> SELECT SUBSTRING('Quadratically',5,0);

            -> ''    

    mysql> SELECT SUBSTRING('Sakila', -3);

            -> 'ila'      

    mysql> SELECT SUBSTRING('Sakila', -5, 3);

            -> 'aki'

    mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);

            -> 'ki'

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

    注意,如果对len使用的是一个小于1的值,则结果始终为空字符串。

    SUBSTR()是 SUBSTRING()的同义词。

    • SUBSTRING_INDEX(str,delim,count)

    在定界符 delim 以及count 出现前,从字符串str返回自字符串。若count为正值,则返回最终定界符(从左边开始)左边的一切内容。若count为负值,则返回定界符(从右边开始)右边的一切内容。

    mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);

            -> 'www.mysql'

    mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);

            -> 'mysql.com'

    • 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 列代替)。

     

      • UNCOMPRESS(string_to_uncompress)

    对经COMPRESS()函数压缩后的字符串进行解压缩。若参数为压缩值,则结果为 NULL。这个函数要求  MySQL 已被诸如zlib 之类的压缩库编译过。否则, 返回值将始终是 NULL。

    mysql> SELECT UNCOMPRESS(COMPRESS('any string'));

            -> 'any string'

    mysql> SELECT UNCOMPRESS('any string');

            -> NULL

    • UNCOMPRESSED_LENGTH(compressed_string)

    返回压缩字符串压缩前的长度。

    mysql> SELECT UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));

            -> 30

    字符串比较函数

  • 相关阅读:
    Leetcode 538. Convert BST to Greater Tree
    Leetcode 530. Minimum Absolute Difference in BST
    Leetcode 501. Find Mode in Binary Search Tree
    Leetcode 437. Path Sum III
    Leetcode 404. Sum of Left Leaves
    Leetcode 257. Binary Tree Paths
    Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
    Leetcode 226. Invert Binary Tree
    Leetcode 112. Path Sum
    Leetcode 111. Minimum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/duanhm234/p/8000216.html
Copyright © 2011-2022 走看看