如何只选择列的一部分?我知道我可以使用substring,但我需要选择一个列的字符串部分。例如:列可以包含以下内容:
DIRL100
我只需要在一列中选择DIRL
部分,而在另一列中选择100
部分。
我可以使用此特定列执行此操作:
SELECT SUBSTRING(column, 5) AS part1,
SUBSTRING(column, 1, 4) AS part2 ....
但我不能确定它在获得数字之前总是有4个字母(DIRL)。我可以以某种方式使用REGEXP或其他东西来提取每列中的数字部分和字母部分吗?
换句话说..我可以按字母结束的位置拆分列。例如,它可以包含DIRL100
或AB100200
,它应分成两列,每列包含列中的字母(DIRL或AB)和列中的数字(100或100200)?
答案 0 :(得分:1)
尝试此请求:
SELECT LEFT(column, patindex('%[0-9]%', column)-1) AS Part1
, RIGHT(column, LEN(column) - patindex('%[0-9]%', column)+1) AS Part2
答案 1 :(得分:0)
不幸的是,MySQL中的regexp功能是有限的。你必须编写一个自定义函数来帮助你。
DROP FUNCTION IF EXISTS get_index;
DELIMITER $$
CREATE FUNCTION get_index(targetString VARCHAR(255)) RETURNS INTEGER
BEGIN
DECLARE i INTEGER;
DECLARE min_index INTEGER;
DECLARE current_index INTEGER;
SET i = 0;
SET min_index = NULL;
loopNumbers: WHILE (i <= 9) DO
SET current_index = LOCATE(i, targetString);
IF current_index > 0 THEN
IF min_index IS NULL OR current_index < min_index THEN
SET min_index = current_index;
END IF;
END IF;
SET i = i + 1;
END WHILE;
RETURN(min_index);
END
$$
DELIMITER ;
此功能的作用是获取数字的第一个位置。然后使用此功能,您可以将查询修改为:
SELECT SUBSTRING(column_name FROM 1 FOR get_index(column_name)-1) AS first, SUBSTRING(column_name FROM get_index(column_name)) AS second
FROM table_name
WHERE column_name REGEXP '^[a-Z]+[0-9]+$'
附加的WHERE条件是可选的,以确保只选择正确格式的数据。