SQL Server / T-SQL: フィールドの先頭ゼロを削除する4つの方法
SQL でフィールドの先頭ゼロを除去する方法
SUBSTRING()
関数は、文字列の一部を抽出するために使用できます。この関数を使用して、フィールドの先頭から最初のゼロ文字をすべて除去することができます。
SELECT SUBSTRING(field_name, 1, LEN(field_name) - PATINDEX('%[^0]%', field_name))
FROM table_name;
この例では、field_name
フィールドの先頭から最初の非ゼロ文字までのすべての文字が抽出されます。
SELECT LTRIM(field_name)
FROM table_name;
SELECT REPLACE(field_name, '^0+', '')
FROM table_name;
CAST()
関数は、文字列を別のデータ型に変換するために使用できます。この関数を使用して、フィールドを数値型に変換してから、ゼロを削除することができます。
SELECT CAST(field_name AS INT)
FROM table_name;
どの方法を使用するかは、状況によって異なります。 以下に、各方法の利点と欠点をご紹介します。
方法 | 利点 | 欠点 |
---|---|---|
SUBSTRING() | 最も汎用性の高い方法 | パフォーマンスが遅い場合がある |
LTRIM() | 最も高速な方法 | 空白文字以外の先頭ゼロを除去できない |
REPLACE() | 比較的単純な方法 | 正規表現を使用する必要がある |
CAST() | 数値型フィールドにのみ使用できる | データ型変換によって精度が失われる場合がある |
例
以下の例では、Customers
テーブルの FirstName
フィールドの先頭ゼロを除去する方法を示します。
-- SUBSTRING() を使う
SELECT SUBSTRING(FirstName, 1, LEN(FirstName) - PATINDEX('%[^0]%', FirstName))
FROM Customers;
-- LTRIM() を使う
SELECT LTRIM(FirstName)
FROM Customers;
-- REPLACE() を使う
SELECT REPLACE(FirstName, '^0+', '')
FROM Customers;
-- CAST() を使う
SELECT CAST(FirstName AS INT)
FROM Customers;
これらの例は、SQL Server でフィールドの先頭ゼロを除去する方法を示しています。T-SQL でも同じ方法を使用できます。
-- テーブル定義
CREATE TABLE Customers (
CustomerID INT IDENTITY(1,1) PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL
);
-- データ挿入
INSERT INTO Customers (FirstName, LastName)
VALUES ('000John', 'Doe'),
('001Jane', 'Doe'),
('012John', 'Smith'),
('123Jane', 'Smith');
-- SUBSTRING() を使う
SELECT SUBSTRING(FirstName, 1, LEN(FirstName) - PATINDEX('%[^0]%', FirstName)) AS FirstName
FROM Customers;
-- LTRIM() を使う
SELECT LTRIM(FirstName) AS FirstName
FROM Customers;
-- REPLACE() を使う
SELECT REPLACE(FirstName, '^0+', '') AS FirstName
FROM Customers;
-- CAST() を使う
SELECT CAST(FirstName AS INT) AS FirstName
FROM Customers;
このコードを実行すると、以下の結果が得られます。
FirstName
---------
John
Jane
John
Jane
FirstName
---------
John
Jane
John
Jane
FirstName
---------
John
Jane
John
Jane
FirstName
---------
123
123
123
123
フィールドの先頭ゼロを除去するその他の方法
CASE
式を使用して、フィールドの先頭ゼロかどうかを判断し、条件に応じて異なる値を返すことができます。
SELECT CASE WHEN LEFT(field_name, 1) = '0' THEN RIGHT(field_name, LEN(field_name) - 1)
ELSE field_name
END
FROM table_name;
この例では、フィールドの先頭文字がゼロの場合は、最後の文字を除いたすべての文字を返します。そうでない場合は、元のフィールド値を返します。
UPDATE
ステートメントを使用して、フィールドの先頭ゼロを直接更新することができます。
UPDATE table_name
SET field_name = REPLACE(field_name, '^0+', '');
ビューを使用して、フィールドの先頭ゼロを除去した結果を仮想的に作成することができます。
CREATE VIEW vw_Customers AS
SELECT CustomerID,
SUBSTRING(FirstName, 1, LEN(FirstName) - PATINDEX('%[^0]%', FirstName)) AS FirstName,
LastName
FROM Customers;
SELECT *
FROM vw_Customers;
方法 | 利点 | 欠点 |
---|---|---|
CASE 式 | 比較的単純な方法 | パフォーマンスが遅い場合がある |
UPDATE ステートメント | パフォーマンスが速い | データベースの更新が必要 |
ビュー | 既存のクエリを変更せずに結果を変更できる | ビューの更新が必要 |
-- CASE 式を使う
SELECT CASE WHEN LEFT(FirstName, 1) = '0' THEN RIGHT(FirstName, LEN(FirstName) - 1)
ELSE FirstName
END AS FirstName
FROM Customers;
-- UPDATE ステートメントを使う
UPDATE Customers
SET FirstName = REPLACE(FirstName, '^0+', '');
-- ビューを使う
CREATE VIEW vw_Customers AS
SELECT CustomerID,
SUBSTRING(FirstName, 1, LEN(FirstName) - PATINDEX('%[^0]%', FirstName)) AS FirstName,
LastName
FROM Customers;
SELECT *
FROM vw_Customers;
sql sql-server t-sql