我有一个字段文本,其中有关于此类
的信息sch hcbhsc hscbshcbc xxxxxxxx sgxfag jdhajdh;
dchbdbc bdcbdh bchdbd xx/xx-xxxx/xx svdhs sbjbsc
bdchbdc jncjdnc jbcjb xx/xx-xxxxx/xx gcvsgc jcbjsb
dchjbd bhjcbdcb bdcbcd xx-xxxx/xx shchscv hscbhsc
dhcbhd jdcbjdb jdcnjdcn xx-xxxxx/xx shcvsch jbscjc
地方x只是一个数字,我需要写选择,只有那些数字被采取
答案 0 :(得分:2)
在SQL server中使用SUBSTRING和PATINDEX字符串函数:
SELECT SUBSTRING(Your_FieldName, PATINDEX('%[0-9]%', Your_FieldName),
LEN(Your_FieldName))
对于MYSQL,请参阅以下URL:
答案 1 :(得分:0)
MySQL中没有正式的PATINDEX()函数可以实现带有返回字符索引的正则表达式模式查找,定义循环遍历字符串长度中每个字符的用户定义函数,并检查字符上的REGEXP模式。创建后,在查询中使用这样的函数。
DROP FUNCTION IF EXISTS PatIndex;
DELIMITER $$
CREATE FUNCTION PatIndex(pattern VARCHAR(255), tblString VARCHAR(255)) RETURNS INTEGER
DETERMINISTIC
BEGIN
DECLARE i INTEGER;
SET i = 1;
myloop: WHILE (i <= LENGTH(tblString)) DO
IF SUBSTRING(tblString, i, 1) REGEXP pattern THEN
RETURN(i);
LEAVE myloop;
END IF;
SET i = i + 1;
END WHILE;
RETURN(0);
END
答案 2 :(得分:0)
这是一个可以执行此操作的MySQL函数(例程)。它是此处提供的解决方案的改进版本:how-to-get-only-digits-from-string-in-mysql
此改进的版本可以处理更大的数字。旧的解决方案受到INTEGER值的限制,因此,例如,如果您有电话号码(或包含很多数字的字符串),则它会因超出列范围而失败。
docker.io
现在您可以执行以下操作:
DELIMITER $$
CREATE FUNCTION ExtractNumber (in_string VARCHAR(50))
RETURNS varchar(50)
NO SQL
BEGIN
DECLARE ctrNumber VARCHAR(50);
DECLARE finNumber VARCHAR(50) DEFAULT '';
DECLARE sChar VARCHAR(1);
DECLARE inti VARCHAR(50) DEFAULT 1;
IF LENGTH(in_string) > 0 THEN
WHILE(inti <= LENGTH(in_string)) DO
SET sChar = SUBSTRING(in_string, inti, 1);
SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9');
IF ctrNumber > 0 THEN
SET finNumber = CONCAT(finNumber, sChar);
END IF;
SET inti = inti + 1;
END WHILE;
RETURN CAST(finNumber AS UNSIGNED);
ELSE
RETURN 0;
END IF;
END$$
DELIMITER ;