SQLServerSTUFFコマンドに関する私の記事と同様です。 、今日はSUBSTRINGSQLサーバーコマンドを調べます。受け入れるパラメータに関しては、STUFFコマンドに似ています。
SUBSTRINGで受け入れられるパラメーターは次のとおりです。
SUBSTRING ( STRING_VALUE , STARTING_POSITION, LENGTH)
SUBSTRINGコマンドは、SQL Server、MySQL、Oracle、Postgresなどのほとんどの主要な標準データベースで普及しています。
いくつかの例を使ってSUBSTRING関数を調べてみましょう。
この最初の例では、「ABC」の文字列値がSUBSTRING関数に渡されます。各呼び出しでは、開始位置の引数が1ずつ増加します。長さの引数は、呼び出しごとに1のままになります。
SELECT SUBSTRING('ABC',1,1); --RETURNS : A
SELECT SUBSTRING('ABC',2,1); --RETURNS : B
SELECT SUBSTRING('ABC',3,1); --RETURNS : C
これらの例から、SUBSTRING関数の一般的な機能を確認できます。開始位置が増えるたびに、返される文字がシフトします。実行#1では値はA、#2では値はB、#3では値はCです。
SUBSTRING関数の興味深い機能は、解析している値の長さを超えても、長さパラメーターが改行されないことです。たとえば、値「1000」の長さは4桁です。 6の長さを指定する次のクエリで解析すると、SUBSTRINGは元の文字列を返します。
SELECT SUBSTRING('1000',1,6); --RETURNS : 1000
次の例では、中古車に関するデータを保持するためのデータベースがあると仮定します。ただし、マルチテーブルリレーショナルデータモデルを使用する代わりに、データベースには主キーとSKUまたは在庫管理単位のみが含まれます。このSKUは、次のキーを使用して、車の特徴に関する複数のフィールドを見つけるために使用できます。
TOY-CEL-R-1990-150
-------------------------------------------------------
MAKE-MODEL-COLOR-YEAR-MILEAGE
*これらの例では、マイレージは1/1000のスケールで表されます。つまり、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
中古車テーブルの出力は次のとおりです。
ID | CAR_SKU |
1 | TOY-CEL-R-1990-150 |
2 | JEP-WRG-W-2019-15 |
3 | FRD-ESC-G-1998-80 |
SUBSTRING関数を使用すると、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 | モデル | 色 | 年 | マイレージ |
おもちゃ | CEL | R | 1990 | 150000 |
JEP | WRG | W | 2019 | 15000 |
FRD | ESC | G | 1998 | 80000 |
SQL SUBSTRING関数を使用して、データベース内の各車両のさまざまな機能を解析することができました。この1つのステップをさらに進めて、SUBSTRINGクエリのビューを作成することにより、その出力をより意味のあるデータに変換しましょう。
リレーショナルデータモデルでは、これは、結合を使用してCASEWHENステートメントを組み込んで値を変換することで実現されます。
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 | モデル | 色 | 年 | マイレージ |
トヨタ | セリカ | 赤 | 1990 | 150000 |
JEEP | ラングラー | WHITE | 2019 | 15000 |
フォード | エスケープ | 緑 | 1998 | 80000 |
セクション4– SUBSTRING A 整数値の代替案
SUBSTRING関数は明示的に文字列値を対象としているため、SUBSTRINGを使用して整数値を解析しようとする次のクエリは失敗します。
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.
整数値を解析するときの代替手段はLEFTまたはRIGHT関数ですが、このアプローチではSUBSTRING関数で提供される柔軟性の一部が失われます。
SELECT LEFT(10000,1); --RETURNS : 1
SELECT RIGHT(1000,1) ; --RETURNS : 0
状況によっては、整数値を文字列として明示的にキャストし、キャストされた値をサブストリングすることもできます。
SELECT (SUBSTRING(CAST(1000 AS VARCHAR(4)),1,1)) AS CASTED_SUBSTRING -- RETURNS : 1
この記事では、開始位置と長さの強力な引数であるSUBSTRING関数を使用するために必要なパラメーターについて説明しました。非関係データモデルでは、SUBSTRINGメソッドを使用して、1フィールドテーブルから車の特徴を抽出し、いくつかの変換ロジックが組み込まれたビューを構築しました。
SUBSTRINGメソッドは、ETLを実行するとき、またはデータベース内のデータを解析するときに知っておくと便利な関数です。データベース内の既存のデータから意味のある重要なデータポイントを抽出するために使用できます。