mysql substring substring_index functions with examples
Další informace o funkcích MySQL SUBSTRING a SUBSTRING_INDEX a jejich použití naleznete na několika příkladech:
Funkce MySQL Substring se používá k extrakci podřetězce nebo dílčího řetězce proti vstupnímu řetězci. Jak název napovídá, funkce Substring pracuje na vstupu řetězce a vrací menší podřetězec oproti zadaným možnostem.
Dozvíme se také o další variantě SUBSTRING s názvem SUBSTRING_INDEX. Tato funkce přijímá znak nebo řetězcovou hodnotu jako oddělovač a provede vyhledávání podle dané hodnoty oddělovače.
Podíváme se také na několik příkladů, abychom pochopili, jak lze tyto funkce použít při dotazování na data jako součást dotazů SELECT.
Co se naučíte:
SUBSTRING MySQL
Syntax:
// format 1 SELECT SUBSTRING('{String Value}', {start_index}, {count}); // format 2 SELECT SUBSTRING('{String Value}'FROM {start_index} for {count});
Existují 2 způsoby, jak můžeme použít funkci SUBSTRING.
Než se ponoříme do příkladů, pochopíme syntaxi.
- {Hodnota řetězce}: Toto je skutečná hodnota řetězce nebo název sloupce obsahující řetězec, na kterém se má pracovat.
- {start_index}: start_index je index zleva nebo zprava, kde by byl spuštěn podřetězec. Hodnoty mohou být kladné nebo záporné podle toho, zda chceme extrahovat řetězec z levé nebo pravé strany. Na příkladech to bude jasnější.
- {počet}: Toto pole je volitelné a určuje počet znaků z start_index pole, pro které je třeba Substring extrahovat. Pokud není uvedeno, pak celý řetězec počínaje odpovídajícím start_index bude vrácena.
Formát2 je variantou formátu1, kromě toho, že je čitelnější pomocí klíčových slov FROM a FOR. Zde se tedy používá FROM, než se zmíníte o start_index hodnota a před zmínkou počet .
Podívejme se na několik příkladů k pochopení funkce MySQL SUBSTRING.
Vezměme hodnotu řetězce jako Nápověda k testování softwaru
Řetězcové indexy budou vypadat jako níže uvedená tabulka
jeden | dva | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | jedenáct | 12 | 13 | 14 | patnáct | 16 | 17 | 18 | 19 | dvacet | dvacet jedna |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
S | nebo | F | t | v | na | r | je | T | je | s | t | i | n | G | H | je | l | str |
Příklad MySQL SUBSTRING
Bez hraběte
Předpokládejme, že chceme extrahovat text nápovědy z výše uvedeného řetězce - H má index 18
Podívejme se na dotaz níže:
SELECT SUBSTRING('Software Testing Help', 18) as extracted_string; SELECT SUBSTRING('Software Testing Help' FROM 18) as extracted_string; // Output Help
Zde je důležité si uvědomit, že jsme nezmiňovali žádnou hodnotu pro počet, ale stále dostáváme správný řetězec - je to proto, že když je počet vynechán, je vrácen celý řetězec začínající od daného indexu.
V tomto případě, pokud zmíníme počáteční index, například, pro „T“ (index 10)
SELECT SUBSTRING('Software Testing Help', 10) as extracted_string; //Output Testing Help
Jak vidíte výše, výstup obsahuje celý text „Nápověda k testování“.
S hrabětem
Nyní se podívejme na příklad, kde uvedeme počet vrácených znaků.
Předpokládejme, že chceme pouze extrahovat slovo „Testování“ z řetězce „Nápověda k testování softwaru“. Pak můžeme zmínit count as - 7 (což je délka slova „Testing“)
Podívejme se na dotaz níže:
SELECT SUBSTRING('Software Testing Help', 10, 7) as extracted_string; SELECT SUBSTRING('Software Testing Help' FROM 10 FOR 7) as extracted_string; //Output Testing
Zde jsme popsali počáteční index i počet znaků jako součást dotazu, abychom získali požadovaný výsledek.
Se zápornými hodnotami indexu
Zatím jsme pro příklady, které jsme viděli, specifikovali start_index jako kladná hodnota.
Můžeme také určit start_index jako záporný, což jednoduše znamená, že místo počítání zleva se stroj MySQL pokusí spočítat počáteční index od konce řetězce.
Podívejme se na příklad
Pro naši řetězec „Nápověda k testování softwaru“ přidáme níže uvedený řádek, abychom určili správné indexy
L | jeden | dva | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | jedenáct | 12 | 13 | 14 | patnáct | 16 | 17 | 18 | 19 | dvacet | dvacet jedna |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
S | nebo | F | t | v | na | r | je | T | je | s | t | i | n | G | H | je | l | str | |||
R | dvacet jedna | dvacet | 19 | 18 | 17 | 16 | patnáct | 14 | 13 | 12 | jedenáct | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | dva | jeden |
Takže dolní řádek zde představuje správné indexy. Předpokládejme, že chceme extrahovat slovo „Testování“ pomocí funkce MySQL SUBSTRING se správným indexem.
Pravý index pro „T“ v Testování je 12 (a levý index je 10)
SELECT SUBSTRING('Software Testing Help', -12, 7) as extracted_string; SELECT SUBSTRING('Software Testing Help' FROM -12 FOR 7) as extracted_string; //Output Testing
Jak vidíte ve výše uvedeném příkladu, uvedení správných indexů jako záporné hodnoty přinese stejný výsledek.
Index mimo hranice
Nyní vyzkoušejte některé negativní scénáře
- Pokud zadaný start_index neexistuje: tj. zadaný index je mimo hranice, pak by byl výstup prázdný.
SELECT SUBSTRING('Software Testing Help', 30, 2) as extracted_string; //output Empty String
- Když je zadaný počet záporný nebo větší než celková délka řetězce, pak by výstup byl jen zbytek řetězce (počínaje zadaným start_index).
SELECT SUBSTRING('Software Testing Help', 5, 100) as extracted_string; //output ware Testing Help
Jak vidíte výše, zde byl počet zmíněn jako 100, ale řetězec má jen 21 znaků.
- Zkusme ještě jeden scénář s počtem zmíněných jako negativní.
SELECT SUBSTRING('Software Testing Help', 5, -20) as extracted_string; //output Empty String
Také zde nebude žádná chyba a bude jen prázdný řetězec, který by byl výstupem.
MySQL SUBSTRING_INDEX
Toto je další varianta funkce MySQL SUBSTRING.
Tady, místo zmínky o skutečné hodnotě start_index, můžeme jednoduše zmínit znak a index a kolikrát je třeba hledat oddělovač před vrácením výstupu.
Zde je důležité si uvědomit, že SUBSTRING_INDEX
Funkce MySQL SUBSTRING INDEX:
SUBSTRING_INDEX({StringValue/Column},delimiter,n)
- {StringValue / Column}: Skutečný řetězec nebo název sloupce v dotazu SELECT.
- Oddělovač: Je třeba hledat znak nebo podřetězec, abyste extrahovali zbývající řetězec jako výstup. Tato hodnota rozlišuje velká a malá písmena, takže by měla být zadána tak, jak je uvedena ve skutečném řetězci.
- n: Počet oddělovačů - tj. Kolikrát má být oddělovač prohledán před vrácením řetězce.
Pochopme to pomocí několika příkladů.
Pro všechny příklady, o kterých budeme diskutovat v následující části níže, použijeme stejný řetězec „Nápověda k testování softwaru“ jako náš vstupní řetězec.
Hledání postavy
Při hledání znaku „T“ bude výstup „Software“. Všimněte si, že bude zahrnut také prostor navíc za slovem Software.
SELECT SUBSTRING_INDEX('Software Testing Help', 'T', 1) as extracted_string; //Output Software
Vyhledejte znak, který se objeví více než jednou. Tady to je - „e“
SELECT SUBSTRING_INDEX('Software Testing Help', 'e', 1) as extracted_string; //Output Softwar
V tomto příkladu: protože jsme zadali počet jako 1, výstup bude String, dokud nebude dosažen první výskyt „e“.
Změňte počet na 2 pro stejný znak „e“.
SELECT SUBSTRING_INDEX('Software Testing Help', 'e', 2) as extracted_string; //Output Software T
Nyní vidíme, že se vrací podřetězec až do druhého výskytu znaku „e“.
Vezměte si další příklad, abyste pochopili, že SUBSTRING INDEX rozlišuje velká a malá písmena. Zkusme to s písmenem „t“ místo „T“
detekce úniku paměti v c ++
SELECT SUBSTRING_INDEX('Software Testing Help', 't', 1) as extracted_string; //Output Sof
Hledání řetězce
Můžeme použít funkci SUBSTRING INDEX pro hledání řetězce místo znaků. Vyhledejme slovo „Testování“.
SELECT SUBSTRING_INDEX('Software Testing Help', 'Testing', 1) as extracted_string; //Output Software
Hledání neexistujícího řetězce
Použití SUBSTRING INDEX s řetězcem, který neexistuje.
SELECT SUBSTRING_INDEX('Software Testing Help', 'abc', 1) as extracted_string; //Output Software Testing Help
Zde může být výstup trochu neočekávaný. Ale protože MySQL Engine nemůže najít požadovanou shodu, vrací celý řetězec jako výstup.
Hledání znaku nebo řetězce v opačném pořadí
Podobně jako funkce SUBSTRING, funkce SUBSTRING INDEX také umožňuje mít uvedený počet jako záporná čísla. To znamená, že místo procházení zleva doprava se MySQL Engine pokusí najít shodu zprava doleva.
Pochopte to pomocí několika příkladů.
SELECT SUBSTRING_INDEX('Software Testing Help', 'T', -1) as extracted_string; //Output esting Help
Ve výše uvedeném příkladu můžete vidět, že oddělovač je „T“, zatímco počet je -1. Výstupem by tedy byl Substring zprava, dokud nebude získána první shoda pro písmeno „T“.
Aplikace funkce MySQL SUBSTRING
Při dotazování na data z 1 nebo více tabulek obecně používáme funkce MySQL String. Lze jej použít k rozdělení hodnot ve sloupci nebo pouze k zobrazení základních hodnot podle potřeby.
Příklad: Předpokládejme, že máme tabulku podrobností o zaměstnanci, která se skládá z id, jména a adresy.
Sloupec s adresou má formát - {HouseNo}, {StreetName}
Níže je skript pro vytvoření tabulky a vložení fiktivních dat:
CREATE TABLE employee_details (name VARCHAR(100), address VARCHAR(100), age INT); INSERT INTO employee_details values ('Akash Malhotra', '22,Defence Colony', 24), ('Steve Wilson','12/4,Wilson Street',28), ('Monica Singh','190,Smith Lane',32);
Pomocí funkce MySQL SUBSTRING získáte číslo domu extrahováno ze sloupce adresy, jak je uvedeno níže.
SELECT name, SUBSTRING_INDEX(address,',',1) as house_no, address, age from employee_details
Výstup:
název | dům_č | adresa | stáří |
---|---|---|---|
Akash malhotra | 22 | 22, Defense Colony | 24 |
Steve Wilson | 12/4 | 12/4, Wilson Street | 28 |
Monica Singh | 190 | 190, Smith Lane | 32 |
Ve výše uvedeném dotazu můžete vidět, že jsme k získání čísla domu ze sloupce adresy použili funkci SUBSTRING_INDEX a jako oddělovač jsme použili znak „.“
Podobně jako v tomto případě může existovat mnoho aplikací, kde bychom chtěli extrahovat řetězec a načíst nějaké smysluplné informace z většího vstupu řetězce nebo hodnoty sloupce.
Často kladené otázky
Otázka č. 1) Která funkce MySQL vrací pozici prvního výskytu SUBSTRING v řetězci?
Odpovědět: MySQL poskytuje 2 funkce pro vrácení nebo extrahování SUBSTRING z dané hodnoty řetězce nebo sloupce.
- PODKLAD
Příklad:
SELECT SUBSTRING('Test Input',1,4) as extracted_string; // Output Test
- SUBSTRING INDEX
Příklad:
SELECT SUBSTRING_INDEX('Test Input','t',1) as extracted_string; //Output Tes
Otázka č. 2) Co je SUBSTRING_INDEX v MySQL?
Odpovědět: Funkce SUBSTRING_INDEX je variantou funkce SUBSTRING. Zatímco v normální funkci SUBSTRING musíte uvést index jako číslo ve vstupním řetězci, pro funkci SUBSTRING_INDEX můžete zmínit buď znak, nebo menší podřetězec, který se má vyhledat.
Doporučené čtení = >> Výukový program MySQL COUNT
Závěr
V tomto kurzu jsme se dozvěděli o funkcích MySQL SUBSTRING a SUBSTRING_INDEX. Obě funkce extrahují Substring proti danému vstupnímu řetězci, ale fungují trochu jiným způsobem.
SUBSTRING očekává index jako skutečná čísla, zatímco SUBSTRING_INDEX může mít oddělovač specifikovaný jako znak nebo hodnotu řetězce a poté může MySQL Engine extrahovat proti požadovanému odpovídajícímu řetězci nebo znaku.
Obě tyto funkce se z velké části používají tam, kde lze sloupec s více informacemi extrahovat do dílčích sloupců pomocí logiky extrakce řetězce na základě příslušných požadavků.
Doporučené čtení
- C # String Tutorial - Metody řetězců s příklady kódu
- Metoda Java substring () - výuka s příklady
- Java String obsahuje () Výukový program metod s příklady
- Metoda Java String compareTo s příklady programování
- Řetězcové funkce v C ++: getline, podřetězec, délka řetězce a další
- Funkce převodu řetězce C ++: řetězec na int a int na řetězec
- Funkce řetězce Python
- Funkce MySQL CONCAT a GROUP_CONCAT s příklady