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 Headquarter
por ;
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 Headquarter
que 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 -sN
y 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 Headquarter
y 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
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);