MySQLで文字列を分割し、最後の文字列を取得するための正しい方法は何ですか?

トゥクトゥク:

私は以下のようなデータを持つテーブルを持っています

mysql> mysql> SELECT * FROM STOCK_COMPANIES LIMIT 10;                                                                
+--------+--------------------------+------------------------+--------------------------------+-----------------------------+                  
| Symbol | Company_name             | Sector                 | Sub_industry                   | Headquarter                 |                  
+--------+--------------------------+------------------------+--------------------------------+-----------------------------+                  
    |    | Agilent Technologies Inc | Health Care            | Health Care Equipment          | Santa Clara; California                        
          |American Airlines Group  | Industrials            | Airlines                       | Fort Worth; Texas                              
          |Advance Auto Parts       | Consumer Discretionary | Automotive Retail              | Roanoke; Virginia                              
      |  | Apple Inc.               | Information Technology | Computer Hardware              | Cupertino; California                          
    |V   | AbbVie                   | Health Care            | Pharmaceuticals                | North Chicago; Illinois                        
 |ABC    | AmerisourceBergen Corp   | Health Care            | Health Care Distributors       | Chesterbrook; Pennsylvania                     
    |    | Abbott Laboratories      | Health Care            | Health Care Equipment          | North Chicago; Illinois                        
            |centure plc            | Information Technology | IT Consulting & Other Services | Dublin; Ireland                                
       | | Adobe Systems Inc        | Information Technology | Application Software           | San Jose; California                           
     |   | Analog Devices; Inc.     | Information Technology | Semiconductors                 | Norwood; Massachusetts                         
+--------+--------------------------+------------------------+--------------------------------+-----------------------------+                  
10 rows in set (0.00 sec)     

私はのコンテンツ分割したいHeadquarterことでは;、最後の文字列を取得します。私は、以下のコマンドを実行しました

mysql> SELECT Headquarter, SUBSTRING_INDEX(Headquarter, ';', -1) AS STATE  FROM STOCK_COMPANIES LIMIT 10;            
+-----------------------------+-----------------+                                                                    
| Headquarter                 | STATE           |                                                                    
+-----------------------------+-----------------+                                                                    
    |  Californialifornia                                                                                            
         ||  Texass                                                                                                  
      |   |  Virginia                                                                                                
    | |  Californiarnia                                                                                              
      |Illinois; Illinois                                                                                            
  | PennsylvaniaPennsylvania                                                                                         
      |Illinois; Illinois                                                                                            
       |    |  Ireland                                                                                               
    |  |  Californiaia                                                                                               
 |   |  Massachusettstts                                                                                             
+-----------------------------+-----------------+  

誰かが、出力が上記のように見ている理由を私に説明できますか?

私はちょうど表示しようとしてもHeadquarter、それは以下のように探しています

mysql> SELECT Headquarter  FROM STOCK_COMPANIES LIMIT 10;                                                                                      
+-----------------------------+                                                                                                                
| Headquarter                 |                                                                                                                
+-----------------------------+                                                                                                                
    |ta Clara; California                                                                                                                      
          |h; Texas                                                                                                                            
          |Virginia                                                                                                                            
      |tino; California                                                                                                                        
    |th Chicago; Illinois                                                                                                                      
 |Chesterbrook; Pennsylvania                                                                                                                   
    |th Chicago; Illinois                                                                                                                      
            |land                                                                                                                              
       |se; California                                                                                                                         
     |ood; Massachusetts                                                                                                                       
+-----------------------------+                                                                                                                
10 rows in set (0.00 sec) 

私が使用してMySQLを開始-sNし、クエリの下に実行しました。それらの両方が期待される出力を与えます

mysql> SELECT Headquarter  FROM STOCK_COMPANIES LIMIT 10;                                                            
Santa Clara; California                                                                                              
Fort Worth; Texas                                                                                                    
Roanoke; Virginia                                                                                                    
Cupertino; California                                                                                                
North Chicago; Illinois                                                                                              
Chesterbrook; Pennsylvania                                                                                           
North Chicago; Illinois                                                                                              
Dublin; Ireland                                                                                                      
San Jose; California                                                                                                 
Norwood; Massachusetts 

mysql> SELECT TRIM(SUBSTRING_INDEX(Headquarter, ';', -1)) AS STATE  FROM STOCK_COMPANIES LIMIT 10;                   
California                                                                                                           
Texas                                                                                                                
Virginia                                                                                                             
California                                                                                                           
Illinois                                                                                                             
Pennsylvania                                                                                                         
Illinois                                                                                                             
Ireland                                                                                                              
California                                                                                                           
Massachusetts 

私は、クエリの下に実行しようとしている場合しかし、その後、再び、それは私が理解することはできませんよ下記の出力を与えています

mysql> SELECT Headquarter, TRIM(SUBSTRING_INDEX(Headquarter, ';', -1)) AS STATE  FROM STOCK_COMPANIES LIMIT 10;      
        Californiaornia                                                                                              
        Texasexas                                                                                                    
        Virginiaa                                                                                                    
        Californiania                                                                                                
        Illinoisllinois                                                                                              
        Pennsylvanialvania                                                                                           
        Illinoisllinois                                                                                              
        Ireland                                                                                                      
        Californiaia                                                                                                 
        Massachusettss       

私は印刷することはできませんよ、なぜ誰かが私に説明することができますHeadquarterし、TRIM(SUBSTRING_INDEX(Headquarter, ';', -1))一緒に?

の出力 mysql -V

$ mysql -V                                                     
mysql  Ver 14.14 Distrib 5.6.39, for Linux (x86_64) using  EditLine wrapper 

THE

$ lsb_release -a                                               
LSB Version:    :core-4.1-amd64:core-4.1-noarch                                                      
Distributor ID: CentOS                                                                               
Description:    CentOS Linux release 7.4.1708 (Core)                                                 
Release:        7.4.1708                                                                             
Codename:       Core  
Barmar:

あなたは、データ内のキャリッジリターン文字を持っています。

私はあなたがデータをそれらをきれいにし、あなたはすべてのクエリでそれらをフィルタリングする必要はありませんので、最初の場所にデータをロードするためにあなたの手順を修正勧め:

UPDATE STOCK_COMPANIES
SET headquarter = REPLACE('\r', '', headquarter);

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=277289&siteId=1