¿Cuál es la forma correcta de dividir una cadena en MySQL y obtener la última cadena?

tuk:

Tengo una tabla que contiene datos, como a continuación

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)     

Quiero dividir el contenido de Headquarterpor ;y obtener la última cadena. Ejecuté el siguiente comando

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                                                                                             
+-----------------------------+-----------------+  

¿Puede alguien explicarme por qué la salida es el aspecto de lo anterior?

Incluso si sólo trato de mostrar la Headquarterque está mirando, como a continuación

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) 

Empecé usando MySQL -sNy ejecutó el siguiente consultas. Ambos dando el resultado esperado

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 

Pero si yo estoy tratando de ejecutar la consulta a continuación, de nuevo se está dando el siguiente salida que no soy capaz de entender

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       

¿Puede alguien me explique por qué no soy capaz de imprimir Headquartery TRIM(SUBSTRING_INDEX(Headquarter, ';', -1))juntos?

La producción de mysql -V

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

LA

$ 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:

Usted tiene caracteres de retorno de carro en sus datos.

Sugiero a limpiar fuera de los datos y corregir sus procedimientos para la carga de los datos, en primer lugar, por lo que no tiene que filtrar en todas las consultas:

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

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=277292&siteId=1
Recomendado
Clasificación