sql >> Databáze >  >> RDS >> Sqlserver

Příkaz SUBSTRING v SQL:Primer

Podobně jako v mém článku týkajícím se příkazu SQL Server STUFF , dnes budeme zkoumat příkaz SQL serveru SUBSTRING. Pokud jde o parametry, které přijímá, je podobný příkazu STUFF.

Parametry akceptované SUBSTRING jsou následující:

SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH)

Příkaz SUBSTRING převládá ve většině hlavních standardních databází, jako je SQL Server, MySQL, Oracle a Postgres.

Pojďme prozkoumat funkci SUBSTRING na několika příkladech.

Část 1 – Jednoduché příklady SUBSTRING

V tomto prvním příkladu bude řetězcová hodnota „ABC“ předána funkci SUBSTRING. Každé volání bude mít argument počáteční pozice zvýšen o 1. Argument délky zůstane 1 pro každé volání.

SELECT SUBSTRING('ABC',1,1); --RETURNS : A

SELECT SUBSTRING('ABC',2,1); --RETURNS : B

SELECT SUBSTRING('ABC',3,1); --RETURNS : C

Z těchto příkladů můžeme vidět obecnou funkčnost funkce SUBSTRING, každý přírůstek na počáteční pozici posune vrácené písmeno. V provedení #1 je hodnota A, #2 je hodnota B a v provedení #3 je hodnota C.

Zajímavou funkcí funkce SUBSTRING je, že parametr length je nepřerušitelný, pokud překročí délku hodnoty, kterou analyzujete. Například hodnota „1000“ má délku 4 číslic. Pokud je analyzován pomocí následujícího dotazu specifikujícího délku 6, SUBSTRING vrátí původní řetězec.

SELECT SUBSTRING('1000',1,6); --RETURNS : 1000

Část 2 – Analýza dat pomocí funkce SUBSTRING

Pro další příklad předpokládejme, že máme databázi pro uchovávání dat o ojetých autech. Namísto použití vícetabulkového relačního datového modelu však databáze obsahuje pouze primární klíč a SKU nebo skladovou jednotku. Toto SKU lze použít k vyhledání více polí kolem funkcí automobilu pomocí následujícího klíče:

TOY-CEL-R-1990-150
-------------------------------------------------------
MAKE-MODEL-COLOR-YEAR-MILEAGE

*V těchto příkladech je ujeté kilometry reprezentováno v měřítku 1/1000, tj. 100 =100 000

IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = 'CODESIGHT_DEMOS')
BEGIN
  CREATE DATABASE CODESIGHT_DEMOS;
END;
GO

USE CODESIGHT_DEMOS;

IF OBJECT_ID('USEDCARS') IS NOT NULL DROP TABLE USEDCARS
CREATE TABLE USEDCARS
(
ID INT IDENTITY(1,1) PRIMARY KEY,
CAR_SKU VARCHAR(30)
)

--MAKE--MODEL--COLOR--YEAR--MILEAGE *1000
INSERT INTO USEDCARS
VALUES('TOY-CEL-R-1990-150')

INSERT INTO USEDCARS
VALUES('JEP-WRG-W-2019-15')

INSERT INTO USEDCARS
VALUES('FRD-ESC-G-1998-80')

SELECT * FROM USEDCARS

Výstup tabulky ojetých vozů je:

ID CAR_SKU
1 TOY-CEL-R-1990-150
2 JEP-WRG-W-2019-15
3 FRD-ESC-G-1998-80

Pomocí funkce SUBSTRING lze tyto hodnoty analyzovat přiřazením správné počáteční polohy a parametrů délky do pole CAR_SKU.

SELECT SUBSTRING(CAR_SKU,1,3) AS MAKE,
SUBSTRING(CAR_SKU,5,3) AS MODEL,
SUBSTRING(CAR_SKU,9,1) AS COLOR,
SUBSTRING(CAR_SKU,11,4) AS YEAR,
SUBSTRING(CAR_SKU,16,3) * 1000 AS MILEAGE
FROM USEDCARS;
MAKE MODEL BARVA ROK NAJEDENÉ KILOMERY
HRAČKA CEL R 1990 150 000
JEP WRG W 2019 15 000
FRD ESC G 1998 80 000

Část 3 – Abstrakce logiky SQL SUBSTRING do pohledů

Pomocí funkce SQL SUBSTRING jsme byli schopni analyzovat různé vlastnosti každého vozidla v naší databázi. Udělejme tento krok dále a převeďte tento výstup na smysluplnější data vytvořením pohledu na dotaz SUBSTRING.

V relačním datovém modelu toho bude dosaženo použitím spojení k začlenění příkazu CASE WHEN k překladu hodnot.

CREATE VIEW  VW_CAR_INVENTORY

AS

SELECT 

CASE WHEN SUBSTRING(CAR_SKU,1,3) = 'TOY' THEN 'TOYOTA'
     WHEN SUBSTRING(CAR_SKU,1,3) = 'JEP' THEN 'JEEP'
	 WHEN SUBSTRING(CAR_SKU,1,3) = 'FRD' THEN 'FORD'
	 END AS MAKE,

CASE WHEN SUBSTRING(CAR_SKU,5,3) = 'CEL' THEN 'CELICA'
     WHEN SUBSTRING(CAR_SKU,5,3) = 'WRG' THEN 'WRANGLER'
	 WHEN SUBSTRING(CAR_SKU,5,3) = 'ESC' THEN 'ESCAPE'
    END AS MODEL,

CASE WHEN SUBSTRING(CAR_SKU,9,1) = 'R' THEN 'RED'
     WHEN SUBSTRING(CAR_SKU,9,1) = 'W' THEN 'WHITE'
	 WHEN SUBSTRING(CAR_SKU,9,1) = 'G' THEN 'GREEN'
    END AS COLOR,

SUBSTRING(CAR_SKU,11,4) AS YEAR,

SUBSTRING(CAR_SKU,16,3) * 1000 AS MILEAGE

FROM USEDCARS
MAKE MODEL BARVA ROK NAJEDENÉ KILOMERY
TOYOTA CELICA ČERVENÁ 1990 150 000
JEEP WRANGLER BÍLÁ 2019 15 000
FORD ÚNIK ZELENÁ 1998 80 000

Část 4 – SUBSTRING A alternativy pro celočíselné hodnoty

Funkce SUBSTRING je explicitně určena pro řetězcové hodnoty, takže následující dotaz, který se pokouší analyzovat celočíselnou hodnotu pomocí SUBSTRING, selže.

SELECT SUBSTRING(1000,1,1); 

--Msg 8116, Level 16, State 1, Line 78 Argument data type int is invalid for argument 1 of substring function.

Alternativou při analýze celočíselných hodnot je funkce LEFT nebo RIGHT, ačkoli tento přístup ztrácí určitou flexibilitu nabízenou funkcí SUBSTRING.

SELECT LEFT(10000,1); --RETURNS : 1
SELECT RIGHT(1000,1) ;  --RETURNS : 0

Případně můžete také explicitně přetypovat celočíselnou hodnotu jako řetězec a podřetězec přetypované hodnoty:

SELECT (SUBSTRING(CAST(1000 AS VARCHAR(4)),1,1)) AS CASTED_SUBSTRING -- RETURNS : 1

Přehled

Tento článek se zabývá parametry požadovanými k použití funkce SUBSTRING, což je silný argument pro počáteční pozici a délku. S nerelačním datovým modelem jsme pomocí metody SUBSTRING extrahovali vlastnosti vozu z tabulky 1 pole a vytvořili pohled s integrovanou transformační logikou.

Metoda SUBSTRING je skvělá funkce, kterou je třeba znát při provádění ETL nebo analýze dat v databázi. Lze jej použít k extrahování smysluplných klíčových datových bodů z již existujících dat ve vaší databázi.


  1. Jak zobrazit řazení databáze v MySQL

  2. Vraťte řádky, které v SQLite obsahují pouze nealfanumerické znaky

  3. jak poslat e-mail přes Pl/sql

  4. Jak aktualizovat/smazat prvky ze dvou různých tabulek SQLite