与えられた式を、特定のデータ型に変換する汎用 SQL 関数です。
Synopsis
CAST(expr AS CHAR | CHARACTER)
CAST(expr AS CHAR(n) | CHARACTER(n) | VARCHAR(n))
CAST(expr AS CHAR VARYING | CHARACTER VARYING)
CAST(expr AS INT | INTEGER | SMALLINT | TINYINT)
CAST(expr AS DEC | DECIMAL | NUMERIC | FLOAT)
CAST(expr AS DATE)
CAST(expr AS TIME)
CAST(expr AS TIMESTAMP)
引数
expr SQL 式
n 最大文字数を示す整数。
概要
SQL の CAST 関数は、式のデータ型を別のデータ型に変換します。
以下のタイプのいずれにでも式のキャストが可能です。
Caché SQL でサポートされているデータ型の一覧については、"データ型" を参照してください。他のデータ型変換については、"CONVERT" 関数を参照してください。
数値のキャスト
数値は、数値データ型または文字列データ型にキャストできます。
少ない桁数の値に数値をキャストすると、その数値は四捨五入ではなく、切り捨てられます。例えば、98.765 を INT にキャストすると 98 が返され、CHAR にキャストすると 9 が返されます。また、CHAR(4) にキャストすると 98.7 が返されます。負数を CHAR にキャストすると負符号のみが返され、小数を CHAR にキャストすると小数点のみが返される点に注意してください。
数値は、0 ~ 9 の数字の桁、小数点、先頭にある 1 つまたは複数の記号 (+ または –)、および指数記号 (文字 E または e) とそれに続く 1 つ以下の + 記号または – 記号で構成できます。数値に桁区切り文字 (コンマ) を入れることはできません。詳細は "リテラル" を参照してください。
数値は、キャストされる前に Caché SQL によって以下のようにその数値のキャノニック形式に変換されます。指数演算が実行されます。Caché によって、先頭と末尾にあるゼロ、先頭にある + 記号、および末尾にある小数点が取り除かれます。数値がキャストされる前に、複数の記号が変換されます。ただし、SQL では 2 つ続いたマイナス記号はコメントを示す記号として扱われます。したがって、数値の中にマイナス記号を 2 つ続けて記述すると、Caché ではそのコード行のそれ以降の部分はコメントとして扱われます。
数値を日付データ型または時刻データ型にキャストすると、SQL では NULL 値として表示されます。ただし、日付または時刻にキャストした数値を埋め込み SQL から Caché ObjectScript に渡すと、対応する $HOROLOG 値として表示されます。
文字列のキャスト
文字列は他の文字データ型にキャストできます。得られる返り値は、1 文字、先頭の n 文字、または文字列全体です。
キャストの前に、Caché SQL によって埋め込み引用符文字 ('can''t'=can't) および文字列連結 ('can'||'not'=cannot) が変換されます。先頭の空白や末尾の空白は削除されます。
文字列を数値型にキャストすると、必ず 1 桁のゼロ (0) が返されます。
文字列は、DATE、TIME、TIMESTAMP のいずれかのデータ型にキャストできます。以下の演算では、有効な数値が得られます。
上記の説明にない値を入力すると、NULL 値が返されます。
NULL のキャスト
NULL はあらゆるデータ型にキャストできますが、返り値は NULL です。
日付のキャスト
日付は、TIMESTAMP データ型、数値データ型、または文字列データ型にキャストできます。
日付を TIMESTAMP データ型にキャストすると、yyyy-mm-dd hh:mm:ss 形式のタイムスタンプが返されます。日付には時刻の部分がないので、得られるタイムスタンプの時刻の部分は必ず 00:00:00 になります。
日付を数値データ型にキャストすると、その日付の $HOROLOG 値が返されます。これは、1840 年 12 月 31 日を 0 とし、そこから起算した日数を表す整数値です。
日付を文字列データ型にキャストすると、日付全体、またはキャスト先のデータ型で決まる長さの日付が返されます。ただし、表示形式はキャスト先の文字列データ型で異なります。CHAR VARYING および CHARACTER VARYING の両データ型では、日付全体が返されます。例えば、日付が mm/dd/yyyy 形式で表示される場合は、その日付が同じ形式の文字列として返されます。他のデータ型では、日付 (またはその一部) が ODBC 日付形式の文字列として返されます。例えば、日付が mm/dd/yyyy 形式で表示される場合は、その日付が yyyy-mm-dd という形式の文字列として返されます。したがって、日付 04/24/2004 に対して、CHAR データ型では暦年の先頭文字である '2' が返され、CHAR(8) データ型では '2004–04–' が返されます。
以下の例では、CAST 関数を使用して、平均値を浮動小数点ではなく整数として表示します。CAST によって数値が四捨五入ではなく、切り捨てられる点に注意してください。
SELECT DISTINCT AVG(Age) AS AvgAge,
   CAST(AVG(Age) AS INTEGER) AS IntAvgAge
      FROM Sample.Person
以下の例では、CAST 関数を使用して、円周率 (浮動小数点値) をさまざまな数値データ型に変換します。
SELECT DISTINCT 
   CAST({fn PI()} As INTEGER) As IntegerPi,
   CAST({fn PI()} As SMALLINT) As SmallIntPi,
   CAST({fn PI()} As DECIMAL) As DecimalPi,
   CAST({fn PI()} As NUMERIC) As NumericPi,
   CAST({fn PI()} As FLOAT) As FloatPi
      FROM Sample.Person
以下の例では、CAST 関数を使用して、円周率 (浮動小数点値) をさまざまな文字列データ型に変換します。
SELECT DISTINCT 
   CAST({fn PI()} As CHAR) As CharPi,
   CAST({fn PI()} As CHAR(4)) As CharNPi,
   CAST({fn PI()} As CHAR VARYING) As CharVaryingPi,
   CAST({fn PI()} As VARCHAR(4)) As VarCharNPi
      FROM Sample.Person
以下の例では、CAST 関数を使用して、Name (文字列) をさまざまな文字列データ型に変換します。
SELECT DISTINCT 
   CAST(Name As CHAR) As CharName,
   CAST(Name As CHAR(4)) As CharNName,
   CAST(Name As CHAR VARYING) As CharVaryingName,
   CAST(Name As VARCHAR(4)) As VarCharNName
      FROM Sample.Person
以下の例では、CAST 関数を使用して Name (文字列) をさまざまな数値データ型に変換した結果を示します。どの場合でも、返り値は 0 (ゼロ) です。
SELECT DISTINCT 
   CAST(Name As INT) As IntName,
   CAST(Name As SMALLINT) As SmallIntName,
   CAST(Name As DEC) As DecName,
   CAST(Name As NUMERIC) As NumericName,
   CAST(Name As FLOAT) As FloatName
      FROM Sample.Person
以下の例では、日付フィールド (DOB) を数値データ型、およびいくつかの文字列データ型にキャストします。日付を数値データ型にキャストすると、その日付に相当する $HOROLOG 整数値が返されます。日付を文字列データ型にキャストすると、CHAR VARYING データ型または CHARACTER VARYING データ型の場合は、入力した形式のままでその日付が返されます。それ以外のデータ型では、日付全体またはその一部が ODBC 日付文字列形式で返されます。
SELECT DISTINCT DOB,
   CAST(DOB As INT) AS IntDate,
   CAST(DOB As CHAR) AS CharDate,
   CAST(DOB As CHAR(6)) AS CharNDate,
   CAST(DOB As CHAR VARYING) AS CharVaryDate,
   CAST(DOB As VARCHAR(10)) AS VarCharNDate
      FROM Sample.Person
以下の例では、文字列を DATE データ型および TIME データ型にキャストします。
SELECT DISTINCT
   CAST('1936-11-26' As DATE) AS StringToDate,
   CAST('14:33:45.78' AS TIME) AS StringToTime
      FROM Sample.Person
日付に変換できるのは、yyyy-mm-dd 形式の文字列のみです。文字列を TIME データ型に変換すると、秒の小数部は四捨五入ではなく、切り捨てられる点に注意してください。
以下の例では、日付を TIMESTAMP データ型にキャストします。
SELECT DISTINCT DOB,
   CAST(DOB As TIMESTAMP) AS DateToTstamp
      FROM Sample.Person
ここで得られるタイムスタンプは、yyyy-mm-dd hh:mm:ss 形式で表されます。
以下の例では、文字列を TIME データ型にキャストし、その結果を TIMESTAMP データ型にキャストします。
SELECT DISTINCT
   CAST(CAST('14:33:45.78' AS TIME) As TIMESTAMP) AS TimeToTstamp
      FROM Sample.Person
ここで得られるタイムスタンプは、yyyy-mm-dd hh:mm:ss 形式で表されます。時刻の部分は入れ子になっている CAST で指定されています。また、日付の部分は現在のシステム日付です。
関連項目