根据字符或数字选择子字符串
Posted
技术标签:
【中文标题】根据字符或数字选择子字符串【英文标题】:Choosing substring depending on character or numeric 【发布时间】:2021-10-23 19:09:28 【问题描述】:我的专栏有两种方式中的任何一种
XXX ZZZ 1.1
XXX 1.1
所以重点是我只需要获取 de 1.1,无论数据以何种方式(1 或 2)来。
我得到了 SQL 中的下一个函数来分割数据,当它找到一个空白时,就像
FUNCTION `ddbb`.`function`(
`x` VARCHAR(255),
`delim` VARCHAR(12),
`pos` INT
) RETURNS varchar(255) CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci
READS SQL DATA
BEGIN
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
delim, '');
END
我如何继续该功能以获取其所在位置的号码?
我的另一个选择是保持功能不变,并在查询中获得正确的位置,但我也遇到了问题。
【问题讨论】:
您使用的是哪个 dbms? (上面的代码是特定于产品的。) 您需要使用空格作为分隔符,您当前的分隔符是一个空字符串。我会先反转该值,看到您正在寻找最后一个,在反转您匹配第一个空格后,然后反转结果。 我正在使用mysql 您的函数也没有动词作为名称,而是您将其称为table
,这根本无法解释其意图。请给您的函数起一个有意义的名称并更新您的帖子以使用 mysql 标记
@ChrisSchaller 感谢您的想法。我真的很感激。我也很感激你试图让人们更好地标记他们的问题。但是谈论函数名称是过分的。正如你可以理解的那样,我并没有在论坛中提供每一个细节。无论如何,谢谢你的帮助。
【参考方案1】:
解决方案类似于
SELECT SUBSTRING_INDEX("first_middle_last", '_', -1);
取自https://***.com/a/18422739/11298427
【讨论】:
【参考方案2】:Mysql 有SUBSTRING_INDEX 可以使用
CREATE tABLe A (ab varchar(20))
INSERT INTO A VALUES ('XXX ZZZ 1.1'), ('XXX 1.1')
| SUBSTRING_INDEX(ab,' ', -1) | | :---------------------------- | | 1.1 | | 1.1 |SELECT SUBSTRING_INDEX(ab,' ', -1) FROM A
db小提琴here
【讨论】:
以上是关于根据字符或数字选择子字符串的主要内容,如果未能解决你的问题,请参考以下文章