Share via


変換関数

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 AdventureWorks2008R2;
GO
SELECT CAST(Title AS nvarchar(20)) AS Title, Revision
FROM Production.Document
WHERE Revision < 2 ;
GO

または

USE AdventureWorks2008R2;
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 行処理されました)

次の例では、datetime 型の列である HireDate 列が char(11) 型の列に変換されます。

USE AdventureWorks2008R2 ;
GO
SELECT p.FirstName, p.LastName, CAST(e.HireDate AS char(11)) AS HireDate 
FROM HumanResources.Employee AS e 
JOIN Person.Person AS p ON e.BusinessEntityID = p.BusinessEntityID
WHERE p.FirstName = 'Kim' ;
GO

以下に結果セットを示します。

FirstName       LastName                  HireDate

---------       -----------------------   -----------

Kim             Abercrombie               2004-02-17

Kim             Akers                     2003-01-27

(2 行処理されました)