假设有一个表名为data
,其中包含一个名为value
的字段,字段中存储了以逗号分隔的字符串。我们需要从该字段中提取数据,并按名称先排序,然后按数字排序。
以下是一个示例的解决方法:
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(value, ',', numbers.n), ',', -1) AS extracted_value
FROM
(SELECT
1 + units.i + tens.i * 10 AS n
FROM
(SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) units,
(SELECT 0 AS i UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) tens
ORDER BY
n
) numbers
INNER JOIN data ON CHAR_LENGTH(value) - CHAR_LENGTH(REPLACE(value, ',', '')) >= numbers.n - 1
ORDER BY
extracted_value;
这个查询使用了一个子查询numbers
,将数字1到100生成为一个临时表。然后使用SUBSTRING_INDEX
函数从分隔字符串中提取数据。CHAR_LENGTH
函数用于计算字符串中逗号的数量,以确定需要提取的数据的位置。最后,使用ORDER BY
对提取的值进行排序,按名称先排序,然后按数字排序。
请注意,示例中的查询假设分隔字符串中的数字是单个数字(0到9)。如果分隔字符串中的数字不是单个数字,而是更长的数字,那么上述查询需要稍作修改。
上一篇:按照名称实例化子类