【问题标题】:Mysql extract alphabetical characters onlyMysql只提取字母字符
【发布时间】:2012-06-07 22:23:54
【问题描述】:

我有一个包含字母和数字混合的列。我需要从列中获取第一组字母字符。一旦遇到整数,我就不再想要了.. 例如:

取 5 行:

  • S123J90
  • SF91K88
  • JK12K99
  • X129PL9
  • ABCD123

我需要这 5 行中的以下数据

  • S
  • 顺丰
  • JK
  • X
  • ABCD

我发现很多关于嵌套 REPLACE 查询的讨论,但我确定有更好的选择吗?

注意:所有行至少以一个字母字符开头


更新:我使用了这个函数http://www.rummandba.com/2011/02/mysql-function-to-remove-non.html的修改如下

DROP FUNCTION IF EXISTS remove_non_alpha_char_f //
CREATE FUNCTION remove_non_alpha_char_f (prm_strInput varchar(255))
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
  DECLARE i INT DEFAULT 1;
  DECLARE v_char VARCHAR(1);
  DECLARE v_parseStr VARCHAR(255) DEFAULT ' ';

WHILE (i <= LENGTH(prm_strInput) )  DO 

  SET v_char = SUBSTR(prm_strInput,i,1);
  IF v_char REGEXP  '^[A-Za-z ]+$' THEN  #alpha

        SET v_parseStr = CONCAT(v_parseStr,v_char);  
        SET i = i + 1;
  ELSE
    SET i=256;
  END IF;

END WHILE; 
RETURN trim(v_parseStr);
END

注意:我已经为这个答案重新编码了函数,所以语法可能已经失效了。

【问题讨论】:

  • 您需要 mysql 为您执行此操作吗?使用 sql 之外的任何编程语言都相当简单
  • 我可以在应用程序代码中做到这一点。不过我有 2900 万行。如果我能在 MySql 中找到一个快速的方法,我相信它会运行得更快。
  • 我找到了一个你可能会觉得有用的链接forums.mysql.com/read.php?10,137433,137433 显然它做起来并不简单,而且它肯定超出了我的知识范围。我最好的选择是创建一个小脚本和另一个列(或表)。该脚本遍历所有记录一次,然后将提取的字符存储在这个新列中。稍后,我会尝试通过更改这些记录的存储方式来更新此列
  • 好电话。基于由 alpha 字符的正则表达式过滤的旧 col 的新 col 可能效果很好。我现在将在 100k 行上运行它,看看它的性能如何。

标签: mysql character extract alphabetical


【解决方案1】:

您可以使用 SUBSTRING()、LENGTH() 创建一个递归函数,检查每个字符是否按字母顺序排列,然后将其添加到结果中。

一旦到达字符串的末尾或碰到一个数字就让它退出。

【讨论】:

【解决方案2】:

对于每一行,尝试以下操作:

$split = preg_split("/\d/", $your_str);

您希望 $split[0] 来自 $split 的数组。

注意这是 PHP - @Pablo 是正确的,你真的需要 MySQL 为你做这件事吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-15
    • 2012-04-09
    • 2017-07-30
    • 2010-10-18
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多