zoukankan      html  css  js  c++  java
  • Mysql学习笔记(四)字符串函数

    PS:终于看完了字符串函数,心都快碎了...涉及的函数真是太多了...感觉这里的字符串函数和JAVA里的基本都差不多了...基本上算是掌握了,但是想全记住那是不太可能的。。。    

    学习内容:

    字符串函数的掌握和应用..

    ASCii(str)

    返回字符串的最左边的ascii码值..如果str为NULL,那么返回NULL...如果字符串为0,那么返回也为0...

    mysql>select ascii('2');
    mysql>select ascii('dx');

    ORD(str)函数

    如果字符串最左边的字符为多字节字符,那么返回的函数值按照这个公式进行计算...:((first byte ASCII code)*256+(second byte ASCII code))[*256+third byte ASCII code...]。如果最左边的字符不是一个多字节字符,返回值与 ASCII() 函数相同:

    mysql> SELECT ORD('2');
            -> 50
    mysql>SELECT ORD('我');
    ->52946

    那么何为多字节的字符呢?最简单的例子就属于汉字了...比如说一个字符串为“我hello”...那么ORD函数会将第一个多字节字符拆分成两个16进制表示的字节。。"我"字可以被拆分成两个字符,并且每个字符使用16进制数字开进行表示为CE D2,那么返回的值就是(12*16+14)*256+(13*16+2)=52946..

    CONV(N,from_base,to_base)函数

    将一个数字N,从from_base转换为to_base,返回值为字符串..

    mysql> SELECT CONV("a",16,2);
            -> '1010'
    mysql> SELECT CONV("6E",18,8);
            -> '172'

    BIN(N),OCT(N),HEX(N_or_S)函数..其实就是进制转换...估计大家也不陌生

    mysql> SELECT BIN(12);
            -> '1100'
    mysql> SELECT OCT(12);
            -> '14'
    mysql> SELECT HEX(255);
            -> 'FF'
    mysql> SELECT HEX("abc");
            -> 616263

    CONCAT(str,str1,str2......)字符串连接函数,如果一个值为NULL,那么返回值也为NULL。。

    CONCAT_WS(separator,str,str1...)属于上述函数的一种特殊的形式..就是在连接的过程中,在每个字符串之间插入一个标示符..

    mysql> SELECT CONCAT('My', 'S', 'QL');
            -> 'MySQL'
    mysql> SELECT CONCAT_WS(",","First name","Second name","Last Name");
           -> 'First name,Second name,Last Name'

    Length(str),OCTET_Length(str),CHAR_Length(str),CHARACTER_Length(str)...四个函数等价,返回字符串的字节长度..字符串还有比特长度,比特长度就是这个函数所得到的具体值*8...

    mysql> SELECT LENGTH('text');
            -> 4

    Locate(substr,str),Position(substr In str),返回字串substr在str中第一次出现的位置...Instr(str,substr)变量是反的,不过作用是相同的。。

    Locate(substr,str,pos)指定pos位置,查找pos位置以后字串在str第一次出现的位置..

    注意:这些函数对于多字节的字符是安全的..mysql的字符串第一个位置是从1开始的..而不是从0开始的..

    mysql> SELECT LOCATE('bar', 'foobarbar');
            -> 4
    mysql> SELECT LOCATE('bar', 'foobarbar',5);
            -> 7
    mysql> SELECT INSTR('xbar', 'foobar');
            -> 0

    Substring(str,pos,len),Substring(str from pos for len),mid(str,pos,len)..返回指定pos位置的len长度的字符子串...

    Substring(str,pos),Substring(str from pos)。。返回一个从pos位置起的一个字符子串...

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

    Replace(str,from_str,to_str)字符串frmo_str部分将被to_str所替代..

    Reverse(str)字符串反转...

    Insert(str,pos,len,newstr)...在pos位置处后面的len长度的字符串将被newstr替代..这些函数对于多字节字符是安全的...

    mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
            -> 'WwWwWw.mysql.com'
    mysql> SELECT REVERSE('abc');
            -> 'cba'
    mysql> SELECT INSERT('Quadratic', 3, 4, 'What');
            -> 'QuWhattic'

    Export_set(bits,on,off,[sepatator,[number_of_bits]])不太确定到底能不能用得上,感觉上还是比较重要的...

    返回一个字符串,对于在 'bits' 中的每个比特字位,你将得到一个 'on' 字符,而如果比特字位是一个清零比特位(reset bit)你将得到一个 'off' 字符串。每个字符串均被“分隔符”(缺省为“,”)分隔,并且只有 'number_of_bits'(缺省为 64) 个 'bits' 被使用:

    mysql> SELECT EXPORT_SET(5,'Y','N',',',4)
            -> Y,N,Y,N
    
    一些例子,方便大家去理解...
    
    mysql> select EXPORT_SET(1,'1','0','',5);
            -> 10000 
    # 最左边第一位为 20 次幂
    
    mysql> select EXPORT_SET(2,'1','0','',5);
            -> 01000
    # 最左边第一位为 20 次幂,第二位为 21 次幂        
    
    mysql> select EXPORT_SET(4,'1','0','',5);
            -> 00100
    # 最左边第一位为 20 次幂,第二位为 21 次幂,第三位为 22 次幂  
    
    mysql> select EXPORT_SET(15,'1','0','',5);
            -> 11110
    # 最左边第一位为 21 次幂,第四位为 23 次幂  
    
    mysql> select EXPORT_SET(16,'1','0','',5);
            -> 00001
    # 最左边第一位为 21 次幂,第五位为 24 次幂 

    Lcase(str)<==>Lower(str),Ucase(str)<==>Upper(str)字符串大小写转换..

    Load_file("路径名称")。。。读入文件,将文件中的内容更新到数据库当中...注意:这个文件必须在服务器上,还要有完整的路径名称..如果文件不存在,返回NULL...

    mysql> UPDATE tbl_name
               SET blob_column=LOAD_FILE("/tmp/picture")
               WHERE id=1;

    expr REGEXP pat

    expr Like pat

    依照模式 pat 对字符串表达式 expr 执行一个模式比较。模式可以是一个扩展的正则表达式。Returns 如果表达式 expr 匹配 pat,返回 1,否则返回 0RLIKEREGEXP 的同义词,它提供了与 mSQL 的兼容。注意:MySQL 在字符串中使用的是 C 的转义句法(例如“ ”),所以在 REGEXP 字符串中使用的任何一个“”必须被双写。在 MySQL 3.23.4 中,REGEXP 对于正常的(不是二进制)字符串是忽略大小写的:

    mysql> SELECT 'Monty!' REGEXP 'm%y%%';
            -> 0
    mysql> SELECT 'Monty!' REGEXP '.*';
            -> 1
    mysql> SELECT 'new*
    *line' REGEXP 'new\*.\*line';
            -> 1
    mysql> SELECT "a" REGEXP "A", "a" REGEXP BINARY "A";
            -> 1  0
    mysql> SELECT "a" REGEXP "^[a-d]";
            -> 1
    
    当决定一个字符的类型时,REGEXP 和 RLIKE 使用当前使用的字符集(缺省为 ISO-8859-1 Latin1)。 

    strcmp(str,str1)字符串比较函数...

    mysql> SELECT STRCMP('text', 'text2');
            -> -1
    mysql> SELECT STRCMP('text2', 'text');
            -> 1
    mysql> SELECT STRCMP('text', 'text');
            -> 0

    Binary 正常情况下,字符串比较的时候是忽略大小写进行比较的..如果想强制要求大小写...那么使用Binary进行强制要求...

    mysql> SELECT "a" = "A";
            -> 1
    mysql> SELECT BINARY "a" = "A";
            -> 0

    还有很多的字符串函数并没有提到,感觉用不太上,例举了一些比较重要的字符串函数...希望对自己以后有帮助。。。

  • 相关阅读:
    [CF1166E] The LCMs Must be Large
    AtCoder Beginner Contest 161
    [CF1168B] Good Triple
    [CF1172B] Nauuo and Circle
    [CF1185E] Polycarp and Snakes
    [CF1187E] Tree Painting
    Codeforces Round #631 (Div. 2)
    [CF1200E] Compress Words
    Thinkphp绕过宝塔getshell
    如何成为一个漏洞赏金猎人
  • 原文地址:https://www.cnblogs.com/RGogoing/p/4457819.html
Copyright © 2011-2022 走看看