sql >> Database teknologi >  >> RDS >> Mysql

Få et enkelt element fra en listestreng i MySQL

Der er ingen native funktion til dette. Du kan bruge to SUBSTRING_INDEX-funktioner. Og du skal kontrollere, om det specifikke indekselement findes:

SET @string:='1,2,3,4,5';
SET @delimiter:=',';
SET @n:=6;

SELECT
  CASE WHEN
    CHAR_LENGTH(@string)-CHAR_LENGTH(REPLACE(@string, @delimiter, ''))>=
    @n*CHAR_LENGTH(@delimiter)-1
  THEN
    SUBSTRING_INDEX(SUBSTRING_INDEX(@string, @delimiter, @n), @delimiter, -1)
  END;
  • SUBSTRING_INDEX(@string, @delimiter, @n) returnerer understrengen fra streng @string før @n forekomster af @delimiter .
  • SUBSTRING_INDEX( ... , @delimiter, -1) returnerer alt til højre for den endelige afgrænsning
  • du skal kontrollere, om afgrænser @n eksisterer. Vi kan trække længden af ​​strengen med afgrænsningstegnet, og strengen med afgrænsningstegnet fjernet - ved hjælp af REPLACE(@string, @delimiter, '') - og se om den er større end @n*CHAR_LENGTH(@delimiter)-1


  1. MySQL Vælg flere værdier

  2. mysql innodb transaktion samtidighed

  3. Django-forbindelse til postgres af docker-compose

  4. Bedste praksis til lagring af databaseadgangskode