簡體   English   中英

有沒有辦法從mysql或java的列值中提取字符串的特定部分?

[英]Is there any way to extract a particular part of string from column value in mysql or java?

在第一次出現價格之前,我只想顯示列值中字符串的一部分。

例如:

物料清單 9W BDQ 3285 9W 物料清單 3285 INR6570END XT 380WO113

AMD EK X/DXB EK MUC 1241.36CWE1SIN1/LNE3 EK X/DXB

BDQ 9W MAA 6300 INR6300END

輸出 :

BDQ

穆克

馬航

只因為日子又變長了……

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,string VARCHAR(30) NOT NULL);


INSERT INTO my_table (string) VALUES
('BOM 9W BDQ 3285 9W BOM 3285 INR6570END XT 380WO113'),
('AMD EK X/DXB EK MUC 1241.36CWE1SIN1/LNE3 EK X/DXB'),
('BDQ 9W MAA 6300 INR6300END');

DROP TABLE IF EXISTS ints;

CREATE TABLE ints(i INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
INSERT INTO ints VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);

SELECT b.*
  FROM 
     ( SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(string,' ',i+1),' ',-1) x, MIN(i) rank FROM my_table JOIN ints GROUP BY id,x ORDER BY id,rank 
     ) a
  JOIN
     ( SELECT id,SUBSTRING_INDEX(SUBSTRING_INDEX(string,' ',i+1),' ',-1) x, MIN(i) rank FROM my_table JOIN ints GROUP BY id,x ORDER BY id,rank 
     ) b
    ON b.id = a.id
   AND b.rank = a.rank -1
 WHERE a.x REGEXP '^[0-9]{4}';

+----+-----+------+
| id | x   | rank |
+----+-----+------+
|  1 | BDQ |    2 |
|  2 | MUC |    4 |
|  3 | MAA |    2 |
+----+-----+------+

如果您想找到第一個價格,而不是全部,您應該嘗試以下操作:

^.*?(\w+?)\s\d+(\s|\.)

並為第一組進行匹配,即(\\w+?)定義的組。

用於分隔我使用的價格(\\s|\\.)因為我在第二行看到它可以包含一個點,這是真的嗎?

如果您想測試它,請使用此鏈接

它可以使用簡單的java代碼完成

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Patrn {
    public static void main(String[] args) {
         //input strings
        String eqn[] = { "BOM 9W BDQ 3285 9W BOM 3285 INR6570END XT 380WO113 " 
                 ," AMD EK X/DXB EK MUC 1241.36CWE1SIN1/LNE3 EK X/DXB " 
                 ," BDQ 9W MAA 6300 INR6300END " };
      //match 4 digit numbers
        Pattern p = Pattern.compile("-?\\d{4}+");
        for(int i=0;i<eqn.length;i++){
        Matcher m = p.matcher(eqn[i]);
      //finding first match 
        if (m.find()) {
            //m.start() used to find start position of matched substring
            //print substring of original string from -4 position of matched 
          System.out.println(eqn[i].substring(m.start()-4,m.start()-1));
        }
       }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM