2013-01-14 98 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

相關問題