【问题标题】:Mysql split string and get only integer valueMysql拆分字符串并仅获取整数值
【发布时间】:2017-07-19 04:25:39
【问题描述】:

我无法拆分字符串并仅获取圆括号中的数值。我尝试substring_index,但无法成功。

栏目

prd_code

HWC-4054 (100 Pcs available)
HWC-7514 (125 pcs available)
HWC-1516 (total 80 pcs available)
HWC-8008 (80pcs available)

所需输出

prd_code

100
125

谢谢。

【问题讨论】:

    标签: php mysql numbers substring


    【解决方案1】:

    刚才我试图解决你的问题,请看一下:

    SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('HWC-4054 (100 Pcs available)','(',-1),' ',1)
    

    这只是代码sn-p,你需要检查它是否适合你的项目。

    【讨论】:

    • 我认为现在你需要编写存储过程来实现你的结果。
    【解决方案2】:

    请使用mysql功能检查以下解决方案。

    select prd_code,digits(SUBSTRING_INDEX( SUBSTRING_INDEX( prd_code , '(', -1 ), ')', 1)) as one from `your table`
    

    使用下面的mysql函数:

    DELIMITER |
    CREATE FUNCTION digits( str CHAR(32) ) RETURNS CHAR(32)
    BEGIN
     DECLARE i, len SMALLINT DEFAULT 1;
     DECLARE ret CHAR(32) DEFAULT '';
     DECLARE c CHAR(1);
    
     IF str IS NULL
     THEN 
       RETURN "";
     END IF;
    
     SET len = CHAR_LENGTH( str );
     REPEAT
       BEGIN
         SET c = MID( str, i, 1 );
         IF c BETWEEN '0' AND '9' THEN 
           SET ret=CONCAT(ret,c);
         END IF;
         SET i = i + 1;
       END;
     UNTIL i > len END REPEAT;
     RETURN ret;
    END |
    DELIMITER ;
    

    来自this的参考

    【讨论】:

    • 必须使用digits函数?我只是说没有功能是不可能的?
    【解决方案3】:
    select SUBSTRING_INDEX(REPLACE(SUBSTRING(SUBSTRING_INDEX(ucase(pcode), '(', 2),LENGTH(SUBSTRING_INDEX(ucase(pcode), '(', 2 -1)) + 1),'(', ' '),'P',1) as prd_code from tbltest;
    

    在这个 tbltest 中是表名,pcode 是该表中包含 prd_code 值的列

    【讨论】:

    • 谢谢!但我得到空字段。
    【解决方案4】:

    你可以使用PATINDEX

    SELECT SUBSTRING(Your_FieldName, PATINDEX('%[0-9]%', Your_FieldName), LEN(Your_FieldName))
    

    【讨论】:

    • 谢谢。但我得到PATINDEX不存在的错误。
    • 好的。您可以使用 LOCATE() 和 REGEXP() 代替 PATINDEX
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多