sql >> Databasteknik >  >> RDS >> Mysql

MySQL - Få de första 3 kommaseparerade värdena

Du kan använda SUBSTRING_INDEX två gånger, den andra med -1 parameter:

SELECT
  'aaaaa, bbbbb, ccccc',
  SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 1) AS column_one,
  SUBSTRING_INDEX(SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 2), ',', -1) AS column_two,
  SUBSTRING_INDEX(SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 3), ',', -1) AS column_three

Om parametern är negativ returneras allt till höger om den sista avgränsaren (räknat från höger). T.ex.

  • SUBSTRING_INDEX('aaaaa, bbbbb, ccccc', ',', 2) returnerar aaaaa, bbbbb
  • SUBSTRING_INDEX( aaaaa, bbbbb, ',', -1) returnerar sedan bbbbb

Du kanske också vill använda ', ' som avgränsare eller TRIM resultatet.

Se fiolen här .

Redigera

Om du vill överväga strängar som kan ha mindre än tre värden kan du använda något i stil med detta:

SELECT
  s,
  SUBSTRING_INDEX(s, ',', 1) AS column_one,
  CASE WHEN LENGTH(s)-LENGTH(Replace(s, ',', ''))>0
       THEN SUBSTRING_INDEX(SUBSTRING_INDEX(s, ',', 2), ',', -1)
       ELSE NULL END AS column_two,
  CASE WHEN LENGTH(s)-LENGTH(Replace(s, ',', ''))>1
       THEN SUBSTRING_INDEX(SUBSTRING_INDEX(s, ',', 3), ',', -1)
       ELSE NULL END AS column_three
FROM
  strings

Se fiolen här .




  1. Hur får jag asynkront/händelsedrivet LISTEN/NOTIFY-stöd i Java med hjälp av en Postgres-databas?

  2. SQL-kommaseparerad rad med Group By-sats

  3. Uppgradering till PostgreSQL 11 med logisk replikering

  4. Lagra resultatet av ett förberett uttalande som en tabell i mysql?