我有一个长度为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
}
以上脚本有效,但是还有其他解决办法。
谢谢。
答案 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;
我们不需要清空临时表,该函数将解决该问题。