Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SUBSTRING Polecenie w SQL:elementarz

Podobny do mojego artykułu dotyczącego polecenia SQL Server STUFF , dzisiaj będziemy badać polecenie serwera SQL SUBSTRING. Jest podobny do polecenia STUFF pod względem akceptowanych parametrów.

Parametry akceptowane przez SUBSTRING są następujące:

SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH)

Polecenie SUBSTRING jest powszechne w większości głównych standardowych baz danych, takich jak SQL Server, MySQL, Oracle i Postgres.

Przyjrzyjmy się funkcji SUBSTRING na kilku przykładach.

Sekcja 1 – Proste przykłady PODŁAŃCÓW

W tym pierwszym przykładzie do funkcji SUBSTRING zostanie przekazana wartość ciągu „ABC”. Każde wywołanie będzie miało argument pozycji początkowej zwiększony o 1. Argument długości pozostanie 1 dla każdego wywołania.

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

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

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

Z tych przykładów możemy zobaczyć ogólną funkcjonalność funkcji PODŁAŃCUCH, każdy przyrost w pozycji początkowej przesuwa zwracaną literę. W wykonaniu #1 wartością jest A, #2 wartością jest B, a w #3 wartością jest C.

Interesującą cechą funkcji SUBSTRING jest to, że parametr length jest nieprzerywalny, jeśli przekracza długość analizowanej wartości. Na przykład wartość „1000” ma długość 4 cyfr. W przypadku analizy z następującym zapytaniem określającym długość 6, SUBSTRING zwraca oryginalny ciąg.

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

Sekcja 2 – Parsowanie danych za pomocą funkcji SUBSTRING

W kolejnym przykładzie załóżmy, że mamy bazę danych do przechowywania danych o używanych samochodach. Jednak zamiast korzystać z wielotabelowego relacyjnego modelu danych, baza danych zawiera tylko klucz podstawowy i jednostkę SKU lub jednostkę magazynową. Ten kod SKU można wykorzystać do znalezienia wielu pól wokół cech samochodu za pomocą następującego klawisza:

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

*W tych przykładach przebieg jest przedstawiony w skali 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

Dane wyjściowe tabeli używanych samochodów to:

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

Korzystając z funkcji SUBSTRING, wartości te można analizować, przypisując prawidłową pozycję początkową i parametry długości do pola 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;
WYKONAJ WZÓR KOLOR ROK PRZEBIEG
ZABAWKA CEL R 1990 150000
JEP WRG W 2019 15000
FRD ESC G 1998 80000

Sekcja 3 – Abstrahowanie logiki SQL SUBSTRING do widoków

Korzystając z funkcji SQL SUBSTRING, byliśmy w stanie przeanalizować różne cechy każdego pojazdu w naszej bazie danych. Pójdźmy o krok dalej i przetłumaczmy te dane wyjściowe na bardziej znaczące dane, tworząc widok zapytania SUBSTRING.

W relacyjnym modelu danych zostanie to osiągnięte przez użycie złączeń w celu włączenia instrukcji CASE WHEN do przetłumaczenia wartości.

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
WYKONAJ WZÓR KOLOR ROK PRZEBIEG
TOYOTA CELICA CZERWONY 1990 150000
JEEP WRANGLER BIAŁY 2019 15000
FORD UCIECZKA ZIELONY 1998 80000

Sekcja 4 – PODŁAŃCUCH A Alternatywy dla wartości całkowitych

Funkcja PODŁAŃCUCH jest jawnie dla wartości łańcuchowych, więc następujące zapytanie próbujące przeanalizować wartość całkowitą za pomocą PODŁAŃCUCHU zakończy się niepowodzeniem.

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.

Alternatywą podczas analizowania wartości całkowitych jest funkcja LEFT lub RIGHT, chociaż to podejście traci część elastyczności prezentowanej w funkcji SUBSTRING.

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

Sytuacyjnie możesz również jawnie rzutować wartość całkowitą jako łańcuch i podłańcuch rzutowanej wartości:

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

Podsumowanie

W tym artykule omówiono parametry wymagane do użycia funkcji PODŁAŃCUCH, która jest silnym argumentem za pozycją początkową i długością. W przypadku nierelacyjnego modelu danych użyliśmy metody SUBSTRING, aby wyodrębnić cechy samochodu z tabeli jednopolowej i skonstruować widok z wbudowaną logiką transformacji.

Metoda SUBSTRING jest świetną funkcją do poznania podczas wykonywania ETL lub analizowania danych w bazie danych. Można go użyć do wyodrębnienia znaczących kluczowych punktów danych z już istniejących danych w bazie danych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź, czy plik istnieje, czy nie na serwerze sql?

  2. Pobieranie wartości zwracanej z procedury składowanej w C#

  3. Nie można powiązać wieloczęściowego identyfikatora

  4. Jak wyświetlić sortowanie kolumny w SQL Server (T-SQL)

  5. jak pominąć zły wiersz w źródle pliku płaskiego ssis?