将Varchar拆分为MySQL中的字符

时间:2014-01-07 12:36:06

标签: mysql split character

我有一个长度为6的varchar字段。我想在MySQL中拆分成单个字符。目前我已尝试使用以下脚本:

col = '123456';
{
select SUBSTRING(col,1, 1),
SUBSTRING(col, 2,1),
SUBSTRING(col, 3,1),
SUBSTRING(col, 4,1),
SUBSTRING(col, 5,1),
SUBSTRING(col, 6,1)
from tbl_table
}

以上脚本有效,但是还有其他解决办法。

谢谢。

3 个答案:

答案 0 :(得分:2)

MySQL中没有字符串拆分功能。所以你必须创建自己的功能。使用以下链接。这将帮助您

拆分分隔字符串

以下示例函数接受3个参数,使用SQL函数执行操作,并返回结果。

<强>功能

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

<强>用法

SELECT SPLIT_STR(string, delimiter, position)

示例

SELECT SPLIT_STR('a|bb|ccc|dd', '|', 3) as third;

+-------+
| third |
+-------+
| ccc   |
+-------+

现金:http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

答案 1 :(得分:1)

另一种解决方案是使用您正在使用的任何(未知)脚本语言进行拆分。否则,如果有效,请不要修复它。

要为此答案添加一些实际值,我将补充一点,将列有意义地命名是一个好习惯:

col = '123456';
{
select SUBSTRING(col,1, 1) AS value1,
SUBSTRING(col, 2,1) AS value2,
SUBSTRING(col, 3,1) AS value3,
SUBSTRING(col, 4,1) AS value4,
SUBSTRING(col, 5,1) AS value5,
SUBSTRING(col, 6,1) AS value6
from tbl_table
}

此外,如果您发现自己这样做,则意味着您没有正确使用RDBMS,而且每个都应该位于单独的字段中。

答案 2 :(得分:0)

您可以创建一个在while循环中在字符串上运行的函数,直到没有任何结果为止(我为JOIN子句添加了$ id):

<nb-layout>
  <nb-layout-header fixed>Company Name </nb-layout-header>

  <nb-sidebar>
    <nb-card>
      <nb-menu [items]="items" autoCollapse="true">
      </nb-menu>
    </nb-card>
  </nb-sidebar>

  <nb-layout-column>
    Page Content <button nbButton>Hello World</button>
  </nb-layout-column>
</nb-layout>

然后您可以这样称呼它:

CREATE DEFINER=`root`@`localhost` FUNCTION `fn_split_str_to_chars`($id INT, $str VARCHAR(800), $empty_table BIT) RETURNS int(11)
BEGIN

    DECLARE counter int;
    DECLARE length int;
    SET counter = 1;
    SET length = length($str);
    
    IF $empty_table THEN
        DROP TEMPORARY TABLE IF EXISTS tmp_chars;    
    END IF;
                    
    CREATE TEMPORARY TABLE IF NOT EXISTS tmp_chars AS (SELECT $id as id, SUBSTR($str, counter, 1) as val where 1 = 2);
        
    WHILE counter <= length DO        
        INSERT INTO tmp_chars
        SELECT $id, SUBSTR($str, counter, 1);
        
        SET counter = counter + 1;
    END WHILE;
    
        
    RETURN length;
END

或者您的情况:

DROP TEMPORARY TABLE IF EXISTS tmp_chars;
SELECT  SUM(fn_split_str_to_chars(ID, FieldToSplit, 0))
FROM    MyTable as b;
SELECT * FROM tmp_chars;

我们不需要清空临时表,该函数将解决该问题。