zoukankan      html  css  js  c++  java
  • 两个比较有用的字符串函数



    DELIMITER // CREATE FUNCTION substr_count(in_haystack mediumtext, in_needle varchar(255), in_offset int unsigned, in_length int unsigned) RETURNS int unsigned LANGUAGE SQL DETERMINISTIC NO SQL SQL SECURITY INVOKER BEGIN DECLARE v_count, v_haystack_len, v_needle_len, v_offset, v_endpos int unsigned DEFAULT 0; SET v_haystack_len = CHAR_LENGTH(in_haystack), v_needle_len = CHAR_LENGTH(in_needle), v_offset = IF(in_offset IS NOT NULL AND in_offset > 0, in_offset, 1), v_endpos = IF(in_length IS NOT NULL AND in_length > 0, v_offset + in_length, v_haystack_len); -- The last offset to use with LOCATE is at v_endpos - v_needle_len. -- That also means that if v_needlen > v_endpos, the count is trivially 0 IF (v_endpos > v_needle_len) THEN SET v_endpos = v_endpos - v_needle_len; WHILE (v_offset < v_endpos) DO SET v_offset = LOCATE(in_needle, in_haystack, v_offset); IF (v_offset > 0) THEN -- v_offset is now the position of the first letter in the needle. -- Skip the length of the needle to avoid double counting. SET v_count = v_count + 1, v_offset = v_offset + v_needle_len; ELSE -- The needle was not found. Set v_offset = v_endpos to exit the loop. SET v_offset = v_endpos; END IF; END WHILE; END IF; RETURN v_count; END// DELIMITER ;

    例子:

    mysql> SELECT substr_count('a/b/c/d/e', '/', 3, 5);
    +--------------------------------------+
    | substr_count('a/b/c/d/e', '/', 3, 5) |
    +--------------------------------------+
    |                                    2 |
    +--------------------------------------+
    1 row in set (0.00 sec)

    2:

    DELIMITER //
       CREATE
     FUNCTION substr_by_delim(in_set mediumtext, in_delimiter varchar(255), in_pos int) RETURNS mediumtext
      COMMENT 'Returns the Nth element from a delimited list.'
     LANGUAGE SQL DETERMINISTIC NO SQL SQL SECURITY INVOKER
        BEGIN
          DECLARE v_num_parts int unsigned DEFAULT 0;
    
          IF (in_pos < 0) THEN
             -- substr_count returns the number of delimiters, add 1 to get the number of parts
             SET v_num_parts = substr_count(in_set, in_delimiter, NULL, NULL) + 1;
             IF (v_num_parts >= ABS(in_pos)) THEN
                -- Add the requested position (which is negative, so is actually a subtraction)
                -- Add 1 as the position is 1 based.
                SET in_pos = v_num_parts + in_pos + 1;
             ELSE
                -- The requested position is out of range, so set in_pos to 0.
                SET in_pos = 0;
             END IF;
          END IF;
          IF (in_pos <= 0 OR in_pos IS NULL OR in_pos > substr_count(in_set, in_delimiter, 0, NULL)+1) THEN
             -- in_pos is not BETWEEN 1 AND #of elements.
             RETURN NULL;
          ELSE
             RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(in_set, in_delimiter, in_pos), in_delimiter, -1);
          END IF;
       END//
    DELIMITER ;

    例子:

    mysql> SELECT substr_by_delim('a,b,c,d,e', ',', 2);
    +--------------------------------------+
    | substr_by_delim('a,b,c,d,e', ',', 2) |
    +--------------------------------------+
    | b                                    |
    +--------------------------------------+
    1 row in set (0.00 sec)
     
    mysql> SELECT substr_by_delim('a,b,c,d,e', ',', -2);
    +---------------------------------------+
    | substr_by_delim('a,b,c,d,e', ',', -2) |
    +---------------------------------------+
    | d                                     |
    +---------------------------------------+
    1 row in set (0.00 sec)
     
    mysql> SELECT substr_by_delim('a||b||c||d||e', '||', 2);
    +-------------------------------------------+
    | substr_by_delim('a||b||c||d||e', '||', 2) |
    +-------------------------------------------+
    | b                                         |
    +-------------------------------------------+
    1 row in set (0.00 sec)
  • 相关阅读:
    把函数作为参数,调用的时候,先判断这个参数是不是存在,然后调用函数的时候加上()
    @keyframes 和animation配合使用
    让sublime text3支持Vue语法高亮显示
    vue.js中的vue-cli中各个文件简单介绍
    函数节流
    Ajax原理
    Ajax同步
    判断数据类型的方法
    闭包的用途
    vue模板编译
  • 原文地址:https://www.cnblogs.com/zuoxingyu/p/2915585.html
Copyright © 2011-2022 走看看