解析具有可变长度的字符串

时间:2017-05-21 19:04:51

标签: mysql

我有IT背景,但更多地参与PO / PM类型的角色,但我正在接受MySQL并有一个问题。我正在尝试解析文本并遇到以下问题。

我有一个由0000000000XXXXXXXXXX0000000000组成的字符串。零表示0-95位置之间的数值(10)(变化),XXXXXXXXXX表示始终10位置的字符集,由A-Z0-9组成,但始终以一个字母A-Z开头。

我想将此字符串解析为10个字符。使用修剪,定位,中等等似乎很难。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:0)

你最好在你的客户端代码(php,python,你有什么)中进行这种解析,但如果你绝对需要在MySQL中这样做,你可以创建一个类似于这个的函数

DELIMITER //

CREATE FUNCTION parse_str(val VARCHAR(30)) RETURNS VARCHAR(10)
BEGIN
  DECLARE pos INT DEFAULT 6;

  IF val IS NULL OR CHAR_LENGTH(val) < 15 THEN 
    RETURN NULL; 
  END IF;

  WHILE pos < 12 DO
    IF SUBSTRING(val, pos, 1) > '9' THEN
      RETURN SUBSTRING(val, pos, 10);
    END IF;

    SET pos = pos + 1;
  END WHILE;

  RETURN NULL;
END//

DELIMITER ;

然后您可以像这样使用它

SELECT parse_str(val) AS parsed
  FROM table1

以下是SQLFiddle演示

答案 1 :(得分:-1)

你没有说是否修剪&#39;是在INSERT或SELECT方面发生的。

DOCS是一个值得关注的好地方。

MySQL String Functions - TRIM

你可以改善你的问题,然后让“答案者”#39;知道edite并在他们的回答下面留下评论?