仅选择数字,来自文字

时间:2017-04-04 05:56:27

标签: mysql sql database

我有一个字段文本,其中有关于此类

的信息
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只是一个数字,我需要写选择,只有那些数字被采取

3 个答案:

答案 0 :(得分:2)

在SQL server中使用SUBSTRING和PATINDEX字符串函数:

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

对于MYSQL,请参阅以下URL:

Query to get only numbers from a string    串

答案 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 ;