根据字符或数字选择子字符串

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')
SELECT SUBSTRING_INDEX(ab,' ', -1) FROM A
| SUBSTRING_INDEX(ab,' ', -1) | | :---------------------------- | | 1.1 | | 1.1 |

db小提琴here

【讨论】:

以上是关于根据字符或数字选择子字符串的主要内容,如果未能解决你的问题,请参考以下文章

PB中取字符串子串的函数是啥

PB中取字符串子串的函数是啥

如何更改python字符串子字符串信息

华为OD机试 - 最长连续子串(Python)| 真题+思路+考点+代码+岗位

[在python中使用正则表达式搜索字符串子字符串

excel或wps查找文本字符串子串或拆分字符串公式