我想只打印列中字符串的一部分,并忽略包括特殊字符在内的其余内容,我怎样才能实现它
| A | B |
| -------- | -------------- |
| abc | zet=kadala; |
| def | zet=kade; None |
| de | zet=kad; None:81 |
尝试过 SUBSTRING_INDEX(B,'=', -1) AS B
预期产出
| A | B |
| -------- | -------------- |
| abc | kadala |
| def | kade |
| de | kad |
如果你想走
SUBSTRING_INDEX()
路线,那么你需要调用它两次:
SELECT A, SUBSTRING_INDEX(SUBSTRING_INDEX(B, ';', 1), '=', -1) AS B
FROM yourTable;
在 MySQL 8+ 上,您还可以使用正则表达式替换:
SELECT A, REGEXP_REPLACE(B, '^.*?=|;.*$', '') AS B
FROM yourTable;
您可以使用 SUBSTRING_INDEX() 函数从 B 列中提取所需的子字符串。SUBSTRING_INDEX() 函数从指定分隔符之前或之后的字符串中返回子字符串。
这是一个示例 SQL 查询,应该会为您提供预期的输出:
SELECT A, SUBSTRING_INDEX(SUBSTRING_INDEX(B, '=', -1), ';', 1) AS B
FROM your_table_name;
在上面的查询中,我们使用两个嵌套的 SUBSTRING_INDEX() 函数从 B 列中提取所需的子字符串。
内部 SUBSTRING_INDEX() 函数返回最后一次出现“=”字符之后的子字符串,这在第一行中给出“kadala”,在第二行中给出“kade”,在第三行中给出“kad”。
外部 SUBSTRING_INDEX() 函数返回第一次出现 ';' 之前的子字符串字符,删除 'kadala'、'kade' 和 'kad' 之后的剩余字符。
注意:将 'your_table_name' 替换为您的表的实际名称。
要提取 B 列中“=”字符后面的子字符串并删除分号 (;) 后面的任何其他字符,您可以使用 SUBSTRING_INDEX 函数两次。
这是一个应该实现预期输出的示例 SQL 查询:
SELECT A, TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX(B, '=', -1), ';', 1)) AS B
FROM table_name;
此查询将选择 A 列和 B 列的子字符串,该子字符串在最后一次出现“=”字符之后开始,在第一次出现“;”处结束特点。 TRIM 函数用于从结果字符串中删除任何前导或尾随空格。
此查询的输出应该是一个新表,其中 B 列中仅包含所需的子字符串。