変換関数
CAST 変換関数と CONVERT 変換関数は、データ型の変換が SQL Server によって自動的に実行されない場合に、あるデータ型から別のデータ型に式を変換するために使用します。たとえば、char 型の式と datetime 型の式、smallint 型の式と int 型の式、または長さが異なる char 型の式どうしを比較する際には、SQL Server によってこれらの式が自動的に変換されます。これを暗黙的な変換といいます。このような暗黙的な変換で CAST や CONVERT を使用する必要はありません。ただし、次の変換シナリオでは CAST と CONVERT を使用できます。
2 つの式がまったく同じデータ型である場合。
2 つの式が暗黙的に変換可能な場合。
データ型を明示的に変換することが必要な場合。
たとえば、文字を含む char 型の式を int 型の式に変換するなど、不可能な変換を試行すると、SQL Server によってエラー メッセージが表示されます。
また、CAST 関数と CONVERT 関数は、さまざまな特別なデータ形式を取得するために使用することもできます。さらに、選択リストの中、WHERE 句の中、また、式を使える場所であればどこにでも使用できます。
Transact-SQL プログラム コードを SQL-92 に準拠させる場合は、CONVERT ではなく CAST を使用します。CONVERT の機能を利用する場合は、CAST ではなく CONVERT を使用します。
CAST または CONVERT のいずれかを使用する場合、次の情報が必要になります。
変換する式。たとえば、売上レポートには、金額データから文字データに変換する売上データが必要です。
指定した式の変換後のデータ型。たとえば、varchar 型やその他の SQL Server システム データ型があります。
変換後の値を格納しない限り、変換が有効なのは CAST 関数または CONVERT 関数が有効である間のみです。
変換時にデータ型の長さを指定しなかった場合は、SQL Server によって自動的に長さが 30 に指定されます。
例
次の例では、Title 列を nvarchar(20) 型の列に変換してタイトルの長さを短くするために、最初の SELECT ステートメントで CAST を使用し、2 番目の SELECT ステートメントで CONVERT を使用しています。
USE AdventureWorks;
GO
SELECT CAST(Title AS nvarchar(20)) AS Title, Revision
FROM Production.Document
WHERE Revision < 2
GO
または
USE AdventureWorks;
GO
SELECT CONVERT(nvarchar(20), Title) AS Title, Revision
FROM Production.Document
WHERE Revision < 2
GO
以下に各クエリの結果セットを示します。
Title Revision
-------------------- --------
Crank Arm and Tire M 0
Front Reflector Brac 1
Installing Replaceme 0
Repair and Service G 0
Training Wheels 2 1
(5 row(s) affected)
次の例では、datetime 型の列である HireDate 列が char(11) 型の列に変換されます。
USE AdventureWorks
GO
SELECT c.FirstName, c.LastName, CAST(e.HireDate AS char(11)) AS HireDate
FROM HumanResources.Employee e
JOIN Person.Contact c ON e.EmployeeID = c.ContactID
WHERE c.FirstName = 'Kim'
GO
以下に結果セットを示します。
FirstName LastName HireDate
--------- ----------------------- -----------
Kim Abercrombie Dec 12 1997
Kim Akers Mar 23 1998
(2 row(s) affected)