Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql拆分字符串并仅获取整数值_Php_Mysql_Numbers_Substring - Fatal编程技术网

Php Mysql拆分字符串并仅获取整数值

Php Mysql拆分字符串并仅获取整数值,php,mysql,numbers,substring,Php,Mysql,Numbers,Substring,我很难分割字符串,只得到圆括号中的数值。我尝试了substring\u 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 谢谢。您可以使用PATINDEX SELECT SUBSTRING(Your_FieldNa

我很难分割字符串,只得到圆括号中的数值。我尝试了
substring\u 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

谢谢。

您可以使用
PATINDEX

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

在这个tbltest中是表名,pcode是包含prd_代码值的表中的列

刚才我试图解决您的问题,请查看:

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

这只是代码片段,您需要检查它是否适合您的项目

请检查以下使用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 ;

参考自

谢谢。但是我得到的
PATINDEX的错误不存在。好的。您可以使用LOCATE()和REGEXP()代替PATINDEXThank!但是我得到了空字段。必须使用
数字
函数吗?我只是说没有函数是不可能的?我想现在你需要编写存储过程来实现你的结果。
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 ;