Mirip dengan artikel saya tentang perintah SQL Server STUFF , hari ini kita akan memeriksa perintah SUBSTRING SQL server. Ini mirip dengan perintah STUFF dalam hal parameter yang diterimanya.
Parameter yang diterima oleh SUBSTRING adalah sebagai berikut:
SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH)
Perintah SUBSTRING lazim di sebagian besar basis data standar utama seperti SQL Server, MySQL, Oracle, dan Postgres.
Mari kita jelajahi fungsi SUBSTRING dengan beberapa contoh.
Bagian 1 – Contoh SUBSTRING Sederhana
Dalam contoh pertama ini, nilai string "ABC" akan diteruskan ke fungsi SUBSTRING. Setiap panggilan akan memiliki argumen posisi awal yang bertambah 1. Argumen panjang akan tetap 1 untuk setiap panggilan.
SELECT SUBSTRING('ABC',1,1); --RETURNS : A
SELECT SUBSTRING('ABC',2,1); --RETURNS : B
SELECT SUBSTRING('ABC',3,1); --RETURNS : C
Dari contoh-contoh ini kita dapat melihat fungsionalitas umum dari fungsi SUBSTRING, setiap kenaikan pada posisi awal menggeser huruf yang dikembalikan. Dalam eksekusi #1 nilainya adalah A, #2 nilainya adalah B dan dalam #3 nilainya adalah C.
Fitur menarik dari fungsi SUBSTRING adalah parameter panjang tidak terputus jika melebihi panjang nilai yang Anda parsing. Misalnya, nilai "1000" memiliki panjang 4 digit. Jika diuraikan dengan kueri berikut yang menetapkan panjang 6, SUBSTRING mengembalikan string asli.
SELECT SUBSTRING('1000',1,6); --RETURNS : 1000
Bagian 2 – Mengurai Data dengan Fungsi SUBSTRING
Untuk contoh berikutnya, mari kita asumsikan bahwa kita memiliki database untuk menyimpan data tentang mobil bekas. Namun, alih-alih menggunakan model data relasional multi-tabel, database berisi kunci utama dan SKU atau unit penyimpanan saja. SKU ini dapat digunakan untuk menemukan beberapa bidang di sekitar fitur mobil dengan menggunakan kunci berikut:
TOY-CEL-R-1990-150
-------------------------------------------------------
MAKE-MODEL-COLOR-YEAR-MILEAGE
*Dalam contoh ini, jarak tempuh direpresentasikan pada skala 1/1000, yaitu 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
Output dari tabel mobil bekas adalah:
ID | CAR_SKU |
1 | MAINAN-CEL-R-1990-150 |
2 | JEP-WRG-W-2019-15 |
3 | FRD-ESC-G-1998-80 |
Menggunakan fungsi SUBSTRING, nilai-nilai ini dapat diuraikan dengan menetapkan posisi awal dan parameter panjang yang benar ke bidang 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;
BUAT | MODEL | WARNA | TAHUN | MILEAGE |
MAINAN | CEL | R | 1990 | 150000 |
JEP | WRG | S | 2019 | 15000 |
FRD | ESC | G | 1998 | 80000 |
Bagian 3 – Mengabstraksi Logika SQL SUBSTRING ke Tampilan
Menggunakan fungsi SQL SUBSTRING, kami dapat menguraikan berbagai fitur dari setiap kendaraan di database kami. Mari ambil 1 langkah lebih jauh dan terjemahkan output tersebut menjadi data yang lebih bermakna dengan membangun tampilan pada kueri SUBSTRING.
Dalam model data relasional, ini akan dicapai dengan menggunakan gabungan untuk memasukkan pernyataan CASE WHEN untuk menerjemahkan nilai.
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
BUAT | MODEL | WARNA | TAHUN | MILEAGE |
TOYOTA | CELICA | MERAH | 1990 | 150000 |
JEEP | WRANGLER | PUTIH | 2019 | 15000 |
FORD | KELUARKAN | HIJAU | 1998 | 80000 |
Bagian 4 – SUBSTRING A alternatif untuk Nilai Integer
Fungsi SUBSTRING secara eksplisit untuk nilai string, jadi kueri berikut yang mencoba mengurai nilai integer dengan SUBSTRING akan gagal.
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.
Alternatif saat mengurai nilai integer adalah fungsi LEFT atau RIGHT, meskipun pendekatan ini kehilangan beberapa fleksibilitas yang disajikan dengan fungsi SUBSTRING.
SELECT LEFT(10000,1); --RETURNS : 1
SELECT RIGHT(1000,1) ; --RETURNS : 0
Secara situasional, Anda juga dapat secara eksplisit memasukkan nilai integer sebagai string dan mensubstring nilai yang dicor:
SELECT (SUBSTRING(CAST(1000 AS VARCHAR(4)),1,1)) AS CASTED_SUBSTRING -- RETURNS : 1
Ringkasan
Artikel ini membahas parameter yang diperlukan untuk menggunakan fungsi SUBSTRING yang merupakan argumen kuat untuk posisi awal dan panjang. Dengan model data non-relasi, kami menggunakan metode SUBSTRING untuk mengekstrak fitur mobil dari tabel bidang 1 dan membuat tampilan dengan beberapa logika transformasi yang ada di dalamnya.
Metode SUBSTRING adalah fungsi yang bagus untuk diketahui saat melakukan ETL atau mengurai data di dalam database. Ini dapat digunakan untuk mengekstrak poin data kunci yang berarti dari data yang sudah ada di dalam database Anda.