与えられた式を、特定のデータ型に変換する汎用 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)
SQL の
CAST 関数は、式のデータ型を別のデータ型に変換します。
以下のタイプのいずれにでも式のキャストが可能です。
-
CHAR または CHARACTER : 数値または文字列を、その先頭文字で表します。
-
CHAR(
n)、CHARACTER(
n)、または VARCHAR(
n) : 数値または文字列を、
n で指定された文字数で表します。
-
CHAR VARYING または CHARACTER VARYING : 数値または文字列を、元の値の文字数で表します。
-
INT、INTEGER、SMALLINT、および TINYINT : 数値を、その整数部で表します。小数部は切り捨てられます。
-
DEC、DECIMAL、NUMERIC、および FLOAT : 数値を、元の値の桁数で表します。
-
DATE : 日付を表します。日付は、コンテキストに応じて、ユーザのロケールでの日付表示形式 (mm/dd/yyyy など)、ODBC 日付形式 (yyyy-mm-dd)、整数で日付を保存する $HOROLOG 形式 (nnnnn) のいずれかで表すことができます。
-
TIME : 時刻を表します。時刻は、コンテキストに応じて、ユーザのロケールでの時刻表示形式 (hh:mm:ss など)、ODBC 日付形式 (hh:mm:ss)、整数で時刻を保存する $HOROLOG 形式 (nnnnn) のいずれかで表すことができます。
-
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 のいずれかのデータ型にキャストできます。以下の演算では、有効な数値が得られます。
-
'nnnn-nn-nn' 形式の文字列は DATE にキャストできます (これは、ODBC 日付形式に対応した文字列形式です)。値とその範囲の確認が行われます。入力されたデータ値は、1841 ~ 9999 年の範囲の有効な日付であることが必要です。SQL では、キャストされたこの値はロケールの日付表示形式で表示されます。例えば、'20041123' が '11/23/2004' と表示されます。埋め込み SQL では、このキャストにより、対応する $HOROLOG 日付整数が返されます。
-
'nn:nn:nn' 形式または 'nn:nn:nn.nn' 形式の文字列は、TIME データ型にキャストできます (
nn は、有効な時間値の範囲にある 1 桁または 2 桁の整数)。これは、ODBC 時刻形式に対応した文字列形式です。SQL では、キャストされたこの値はロケールの時刻表示形式で表示されます (先頭のゼロが追加され、秒の小数部は切り捨てられます)。例えば、'2:33:25.99' は '02:33:25' と表示されます。埋め込み SQL では、このキャストにより、対応する $HOROLOG 時刻整数が返されます。秒の小数部は切り捨て
られません。
-
通常、DATE データ型または TIME データ型は TIMESTAMP データ型にキャストされます。TIMESTAMP にキャストした文字列は、指定どおりに表示されます。値とその範囲の確認は行われません。また、先頭のゼロは追加されず、秒の小数部も切り捨てられません。
-
'nnnnn' 形式の文字列は DATE にキャストできます (これは、$HOROLOG 日付形式に対応した整数文字列です)。SQL では、キャストされたこの値は NULL 文字列として表示されます。埋め込み SQL では、このキャストにより、対応する $HOROLOG 日付整数が返されます。
-
'nnnnn' 形式の文字列は TIME にキャストできます (これは、$HOROLOG 時刻形式に対応した整数文字列です)。SQL では、キャストされたこの値は NULL 文字列として表示されます。埋め込み SQL では、このキャストにより、対応する $HOROLOG 時刻整数が返されます。
上記の説明にない値を入力すると、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) データ型では '200404' が返されます。
以下の例では、
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
以下の例では、文字列を TIME データ型にキャストし、その結果を TIMESTAMP データ型にキャストします。
SELECT DISTINCT
CAST(CAST('14:33:45.78' AS TIME) As TIMESTAMP) AS TimeToTstamp
FROM Sample.Person