2013-01-14 124 views
-1

字符这是代码大纲我想使用的功能:MySQL的使用REGEXP捕获并返回第二,第三和第四字符串

CREATE function get_n_chars (dfrom varchar(9)) returns varchar(9) 
READS SQL DATA 
begin 
declare d varchar(9); 
dfrom REGEXP '^.(...)'; 
d = $1; 
limit 1; 
return d; 

我并不感到惊讶,以得到一个错误,没有人知道正确的语法,或甚至可能吗?

感谢

+0

你能在平实的语言你正在尝试做解释?如果你只是想在字符串中的特定位置获取字符,为什么要使用正则表达式,为什么定义一个函数呢? MySQL有内置的功能,可以做到这一点。 –

+1

在这种情况下,[SUBSTRING(dfrom,2,3)'](http://dev.mysql.com/doc/en/string-functions.html#function_substring)有什么问题? MySQL不支持使用正则表达式模式匹配运算符捕获字符串部分,但如果绝对必要,您可以[使用UDF](http://www.mysqludf.org/lib_mysqludf_preg/index.php#PREG_CAPTURE_SECTION)。 – eggyal

+0

基本问题是,有一张表格,其公司名称略有不同,但是属于同一家公司。例如:'Apple Inc.','Apple Computers'和Apple Incorporate'。我应该清理这张桌子。我需要根据相似的名字找到重复的内容。因此,所有三个“苹果”都是“重复”,在确定后我需要删除大部分不完整数据的两行。所以,我需要显示这三行与他们的ID号码,然后删除两个。这是我的想法,通过使用内部连接中的函数,我可以找到这些相似的名称。感谢您的回复。 – John

回答

1

your comment above

的基本问题是,有一个具有略微不同,但都是同一家公司的公司名称的表格。例如:'Apple Inc.','Apple Computers'和Apple Incorporate'。我应该清理这张桌子。我需要根据相似的名字找到重复的内容。因此,所有三个“苹果”都是“重复”,在确定后我需要删除大部分不完整数据的两行。所以,我需要显示这三行与他们的ID号码,然后删除两个。

要检索所有疑似重复,怎么是这样的:

SELECT my_table.* FROM my_table JOIN (
    SELECT LEFT(company_name, 4) AS abbr 
    FROM  my_table 
    GROUP BY abbr 
    HAVING COUNT(*) > 1 
) t ON LEFT(my_table.company_name, 4) = t.abbr 
ORDER BY my_table.company_name 
+0

我正在尝试它,但它需要一段时间才能运行。我做了一个解释并得到以下内容: – John

+0

| id | select_type |表| |键入| possible_keys |键| key_len | ref |行|额外| + ---- + - | 1 | PRIMARY | name_loc | ALL | NULL | NULL | NULL | NULL | 115099 |使用临时;使用filesort | | 1 | PRIMARY | | ALL | NULL | NULL | NULL | NULL | 10382 |在哪里使用;使用连接缓冲区| | 2 | DERIVED | name_loc | index | NULL | idx_legal_name | 767 | NULL | 115099 |使用索引;使用临时;使用filesort | – John

+0

感谢这就是我一直在寻找的东西。 – John

相关问题