2.16.1 システム組込みスカラ関数

ここでは,システム組込みスカラ関数の文法について説明します。

日付データ,時刻データ,時刻印データ,及び数データへのシステム組込みスカラ関数の実行例を次の図に示します。

図2-6 日付データ,時刻データ,時刻印データ,及び数データへのシステム組込みスカラ関数の実行例

[図データ]

システム組込みスカラ関数に関係する規則を次に示します。

  1. 埋込み変数,及び?パラメタを単独で値式には指定できません。ただし,四則演算などの値式(単項演算子式を除く)中には指定できます。
  2. 繰返し列を引数の値式として指定する場合,添字を指定してください。ただし,添字としてANYは指定できません。
<この項の構成>
(1) ABS
(2) BIT_AND_TEST
(3) CHARACTER
(4) DATE
(5) DAY
(6) DAYS
(7) DECIMAL
(8) DIGITS
(9) FLOAT
(10) HEX
(11) HOUR
(12) INTEGER
(13) IS_USER_CONTAINED_IN_HDS_GROUP
(14) LENGTH
(15) LOWER
(16) MINUTE
(17) MOD
(18) MONTH
(19) POSITION
(20) SECOND
(21) SUBSTR
(22) TIME
(23) TIMESTAMP
(24) TIMESTAMP_FORMAT
(25) UPPER
(26) VALUE
(27) VARCHAR_FORMAT
(28) YEAR

(1) ABS

(a) 機能

値式の絶対値を返します。

(b) 形式

 ABS(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 数定数
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 四則演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は数データ型,日間隔データ,又は時間隔データにしてください。
  3. 結果のデータ型は,値式のデータ型になります。
  4. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
  5. 結果は値式の絶対値で表現できる値にしてください。表現できない値を指定するとオーバフローエラーになります。なお,オーバフローエラー抑止が設定されている場合の結果については,「2.18 オーバフローエラー抑止が設定されている場合の演算結果」を参照してください。

(2) BIT_AND_TEST

(a) 機能

値式1と値式2の間でビットごとの論理積を求め,論理積の結果のビットのどれかが1の場合にBOOLEAN値(TRUE)を返します。

(b) 形式

 BIT_AND_TEST(値式1,値式2)

(c) 規則
  1. 値式1及び値式2に指定できるものを次に示します。
    • 定数
    • USER
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 埋込み変数,又は?パラメタ
    • 関数呼出し
    • スカラ副問合せ
  2. 値式1及び値式2のデータ型は,文字データ型(CHAR又はVARCHAR),又は最大長が32,000バイト以下のBINARYにしてください。値式1と値式2に指定できるデータ型の組み合わせを次の表に示します。

    表2-29 値式1と値式2に指定できるデータ型の組み合わせ(システム組込みスカラ関数BIT_AND_TEST)

    値式1のデータ型値式2のデータ型
    文字データ
    (CHAR及びVARCHAR)
    バイナリデータ
    (BINARY)
    文字データ(CHAR及びVARCHAR)×
    バイナリデータ(BINARY)×
    (凡例)
    ○:指定できます。
    ×:指定できません。
    注※
    文字データの値式として,16進文字列定数だけ指定できます。

  3. 値式1及び値式2の両方に,埋込み変数,又は?パラメタだけの値式は指定できません。
  4. 一方の値式が埋込み変数,又は?パラメタの場合,埋込み変数,又は?パラメタのデータ型はもう一方の値式のデータ型が文字データのときはVARCHARを想定し,もう一方の値式のデータ型がバイナリデータのときはBINARYを想定します。また,データ長はもう一方の値式のデータ長を想定します。
  5. 値式1と値式2が両方とも文字列データ型の場合,値式1と値式2の文字集合は同じにしてください。ただし,値式1と値式2のどちらかが次に示す値式である場合,対応する値式の文字集合に変換します。
    • 文字列定数
    • 埋込み変数(既定文字集合)
    • ?パラメタ
  6. 値式1と値式2のデータ長が異なる場合,短い方のデータの右側にX'00'を埋めて,文字列長を同じにしてから,ビットごとの論理積を求めます。
  7. 結果のデータ型は,BOOLEAN型になります。
  8. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式1又は値式2のどちらかがナル値であれば,結果もナル値になります。
  9. 値式1と値式2の間でビットごとの論理積を求め,論理積の結果のビットのどれかが1の場合はTRUEとなり,そうでない場合は結果はFALSEとなります。
  10. 値式1及び値式2の両方が長さ0の文字列の場合,結果はFALSEになります。
(d) 留意事項

BIT_AND_TESTは,次の箇所に指定できます。

(e) 使用例

表T1の列(データ型:VARCHAR(2))で,C1にビットがあるかどうかを調べます。

   SELECT * FROM T1
       WHERE BIT_AND_TEST(C1,X'FFFF') IS TRUE

(3) CHARACTER

(a) 機能

日付データ,時刻データ,又は時刻印データを,文字列表現に変換します。

(b) 形式

 CHAR〔ACTER〕(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • CURRENT_DATE
    • CURRENT_TIME
    • CURRENT_TIMESTAMP〔(p)〕
    • 日付データ型の列,時刻データ型の列,及び時刻印データ型の列
    • 列指定
    • コンポネント指定
    • SQL変数又はSQLパラメタ
    • 演算結果が日付データ型となる日付演算
    • 演算結果が時刻データ型となる時刻演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,日付データ型(DATE),時刻データ型(TIME),又は時刻印データ型(TIMESTAMP)にしてください。
  3. 結果のデータ型を次に示します。
    値式が日付データ型の場合:
    CHAR(10)
    値式が時刻データ型の場合:
    CHAR(8)
    値式が時刻印データ型の場合:
    CHAR(19),CHAR(22),CHAR(24),又はCHAR(26)
  4. 結果の値は,値式のデータ型の,既定の文字列表現となります。
  5. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
  6. 結果の文字集合は,既定の文字集合となります。
(d) 使用例
  1. 表T1のC1列(データ型:CHAR)のうち,6か月より以前の日付を現在(1995-02-06)の日付に更新します。

     UPDATE T1
         SET C1=CHAR(CURRENT_DATE)
         WHERE CHAR(CURRENT_DATE - 6 MONTHS) > C1

    [図データ]

  2. 表T2のC1列(データ型:CHAR)のうち,0時0分0秒のものを現在(14:24:45)の時刻に更新します。

     UPDATE T2
         SET C1=CHAR(CURRENT_TIME)
         WHERE C1='00:00:00'

    [図データ]

(4) DATE

(a) 機能
  1. 指定した書式の日付の文字列表現を,日付データに変換します。
  2. 西暦1年1月1日からの通算日数を,日付データに変換します。
(b) 形式
機能1.の形式

 DATE(値式〔,日時書式〕)

機能2.の形式

 DATE(値式)

(c) 機能1.の規則
  1. 値式に指定できるものを次に示します。
    • 日付の文字列表現の定数
    • CURRENT_DATE
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 演算結果が日付データ型となる日付演算
    • 連結演算
    • 集合関数(MAX,MIN)
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式は,次のデータ型にしてください。
    • 日時書式を指定した場合
      ・定義長が8~255バイトの文字データ型(CHAR,VARCHAR)。ただし,文字集合がUTF16の場合は,定義長が16~510バイトの文字データ型。
      ・混在文字データ型(MCHAR,MVARCHAR)
    • 日時書式を指定しない場合
      ・定義長が10バイトの文字データ型(CHAR,VARCHAR)。ただし,文字集合がUTF16の場合は,定義長が20バイトの文字データ型(CHAR,VARCHAR)。
      ・日付データ型(DATE)
  3. 値式のデータ型が文字データ型(CHAR,VARCHAR)の場合,そのデータ型の文字集合は任意です。
  4. 値式は,日時書式で指定した書式の,日付の文字列表現にしてください。日時書式を省略した場合は,日付の既定の文字列表現にしてください。
    (例)
    日時書式'YYYY/MM/DD'の場合→'1995/06/30'
    日時書式を省略した場合→'1995-06-30'
  5. 値式が日付データ型の場合,結果はその日付になります。
  6. 日時書式については,「1.11 日時書式の指定」を参照してください。
  7. 日時書式を指定した場合,値式と日時書式の文字集合は同じにしてください。ただし,日時書式が次に示す値式である場合,値式の文字集合に変換します。
    • 文字列定数
(d) 機能2.の規則
  1. 値式に指定できるものを次に示します。
    • 数定数
    • 列指定
    • コンポネント指定
    • 四則演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,整数(INTEGER)にしてください。また,四則演算,集合関数,又はCASE式を指定したときは,演算の結果を整数のデータ型にする必要があります。
  3. 値式の範囲は,1~3652059の間にしてください。
  4. 結果は西暦1年1月1日から,(指定した数値-1)日後の日付になります。
    (例) 値式が35の場合:西暦1年2月4日
(e) 共通規則
  1. 結果のデータ型は,日付データ型(DATE)になります。
  2. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式,又は日時書式がナル値であれば,結果もナル値になります。
(f) 使用例
  1. スカラ関数CHARACTERの使用例と同様の処理を,スカラ関数DATEを用いて処理します。

       UPDATE T1
           SET C1=CHAR(CURRENT_DATE)
           WHERE CURRENT_DATE - 6 MONTHS > DATE(C1)

  2. 表T2のC1列(データ型:CHAR)の日付の,既定の文字列表現以外の書式('DD/MON/YYYY')で表現した文字列から,日付データを取得します。

       SELECT DATE(C1,'DD/MON/YYYY') FROM T2

    [図データ]

(5) DAY

(a) 機能

日付データ,時刻印データ,又は日間隔データから日の部分だけを抽出します。

(b) 形式

 DAY(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • CURRENT_DATE
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 日付演算
    • 集合関数(MAX,MIN)
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,日付データ型(DATE),時刻印データ型(TIMESTAMP),又は日間隔データ型(INTERVAL YEAR TO DAY)にしてください。
  3. 結果のデータ型は,整数(INTEGER)になります。
  4. 値式が日付データ型,又は時刻印データ型であれば,結果は1~31になります。
  5. 値式が日間隔データ型であれば,結果は-99~99になります。結果が0以外の場合,値式の符号と結果の符号は同じになります。
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
(d) 使用例

表T1のC1列(データ型:日付データ型)のうち,現在と同じ日付の行をすべて検索します。

   SELECT * FROM T1
       WHERE DAY(C1)=DAY(CURRENT_DATE)

(6) DAYS

(a) 機能

日付データ,又は時刻印データを,西暦1年1月1日からの通算日数に変換します。

(b) 形式

 DAYS(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 日付の既定の文字列表現の定数
    • CURRENT_DATE
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 演算結果が日付データ型となる日付演算
    • 演算結果が,日付の既定の文字列表現の定数となる連結演算
    • 集合関数(MAX,MIN)
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,日付データ型(DATE),又は時刻印データ型(TIMESTAMP)にしてください。
  3. 結果のデータ型は,整数(INTEGER)にしてください。
  4. 結果は,西暦1年1月1日から指定した値式の日付を含めた日までの通算の日数になります。
  5. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
(d) 使用例

表T1のC1列の値から,現在(1995-06-30)までの日数を求めます。

   SELECT DAYS(CURRENT_DATE) - DAYS(C1)
       FROM T1

(7) DECIMAL

(a) 機能

数データを10進数データに変換します。

(b) 形式

 DEC〔IMAL〕 (値式〔,精度〔,位取り〕〕)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 数定数
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 四則演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型として指定できるものを次に示します。
    • 数データ型
  3. 精度は,1~38の整数にしてください。精度の指定を省略した場合の仮定値は,指定した値式のデータ型によって異なります。省略時に仮定される精度を次の表に示します。

    表2-30 スカラ関数DECIMALの精度の省略値

    データ型精度(けた)
    INTEGER10
    SMALLINT5
    DECIMAL15
    FLOATシステム共通定義のpd_sql_dec_op_maxprecオペランドが29又は省略の場合:29
    システム共通定義のpd_sql_dec_op_maxprecオペランドが38の場合:38
    SMALLFLT
    注※
    システム共通定義のpd_sql_dec_op_maxprecオペランドについては,マニュアル「HiRDB Version 8 システム定義」を参照してください。
  4. 位取りは,0~精度に指定した値の範囲で指定します。また,位取りは,整数,又は整数の文字列表現にしてください。位取りを省略すると,0が仮定されます。
  5. 結果のデータ型を次の表に示します。

    表2-31 スカラ関数DECIMALの結果のデータ型

    データ型結果の精度結果の位取り
    DECIMAL引数で指定した精度。省略した場合は,表2-30に示すとおりです。引数で指定した位取り。省略した場合は0になります。
  6. 値式の整数部は,指定した,精度及び位取りで表現できる値にしてください。精度を超えると,オーバフローエラーになります。
  7. 結果の値で,指定した位取りよりも下のけたの数値は切り捨てられます。
  8. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
(d) 使用例

システム共通定義のpd_sql_dec_op_maxprecオペランドが29,又はこのオペランドを省略した場合,表T1のC1列(データ型:DECIMAL(10,0))をC2列(データ型:INTEGER)で除算した結果は10進数データDEC(29,19)になりますが,不要なけたを削除してDEC(4,2)にするためにスカラ関数DECIMALを使用して変換します。

   SELECT DECIMAL(C1/C2, 4, 2)
       FROM T1

[図データ]

(8) DIGITS

(a) 機能

整数,10進数,日間隔データ,又は時間隔データの数字の部分を抽出して文字列表現に変換します。

(b) 形式

 DIGITS(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 整数定数,又は10進数定数
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 四則演算
    • 演算結果が日間隔データ型となる日付演算
    • 演算結果が時間隔データ型となる時刻演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,次に示すどれかにしてください。
    • 整数(INTEGER,SMALLINT)
    • 固定小数点数(DECIMAL)
    • 日間隔データ型(INTERVAL YEAR TO DAY)
    • 時間隔データ型(INTERVAL HOUR TO SECOND)
  3. 結果のデータ型は,固定長文字列(CHAR)になります。
  4. 結果のデータ長は,値式のデータ型によって異なります。結果のデータ長を次の表に示します。

    表2-32 スカラ関数DIGITSの結果のデータ長

    データ長結果のデータ長
    INTEGER10
    SMALLINT5
    DECIMAL(p,s)p
    INTERVAL YEAR TO DAY8
    INTERVAL HOUR TO SECOND6
    (凡例)
    p:精度
    s:位取り
  5. 結果は値式の絶対値の文字列表現になり,符号,及び小数点は含みません。また,実際の値のけた数が小さい場合,先頭に'0'が設定されます。
    (例)変換前のデータ型がDECIMAL(4,1)の場合
    15. → '0150'
    -12.4→ '0124'
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
  7. 結果の文字集合は,既定の文字集合になります。
(d) 使用例

表T3のC1列(データ型:CHAR)の値と,C2列(データ型:DECIMAL)の値が,等しいデータを検索します。

   SELECT * FROM T3
       WHERE C1 = DIGITS(C2)

[図データ]

(9) FLOAT

(a) 機能

数データを,浮動小数点データに変換します。

(b) 形式

 FLOAT(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 数定数
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 四則演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型として指定できるものを次に示します。
    • 数データ型
  3. 結果のデータ型は,倍精度浮動小数点数(FLOAT)になります。
  4. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
(d) 使用例

表T1のC1列(データ型:INTEGER)をC2列(データ型:INTEGER)で除算した結果を浮動小数点データで取得するために,除算をする前にスカラ関数FLOATを使用してどちらかのオペランドをFLOAT型に変換します。

   SELECT FLOAT(C1)/C2 FROM T1

[図データ]

(10) HEX

(a) 機能

値式を16進文字列表現に変換します。

(b) 形式

 HEX(値式)

(c) 規則
  1. システム内部で表現されている値式の形式を,16進文字列表現に変換します。内部表現形式と実行結果の例を次の表に示します。

    表2-33 スカラ関数HEXの内部表現形式と実行結果の例

    値 式内部の表現形式HEX(値式)
    '#AB12'データ型:CHAR(5)
    23|41|42|31|32
    '2341423132​'
    1234データ型:INTEGER
    Windowsの場合:D2|04|00|00
    UNIXの場合:00|00|04|D2
    Windowsの場合:'D2040000​'
    UNIXの場合:'000004D2'
    1234.データ型:DECIMAL(4,0)
    01|23|4C
    '01234C'
  2. 値式に指定できるものを次に示します。
    • 定数
    • USER
    • CURRENT_DATE
    • CURRENT_TIME
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 四則演算
    • 日付演算
    • 時刻演算
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  3. 値式に指定できるデータ型と結果のデータ型,及びデータ長の関係を次の表に示します。

    表2-34 スカラ関数HEXの値式のデータ型と結果のデータ型,及びデータ長の関係

    値 式実行結果
    データ型定義長実長データ型定義長実長
    CHAR(n)1≦n<128CHARn*2
    128≦n≦16,000VARCHARn*2n*2
    NCHAR(n)1≦n< 64CHARn*4
    64≦n≦8,000VARCHARn*4n*4
    MCHAR(n)1≦n<128CHARn*2
    128≦n≦16,000VARCHARn*2n*2
    VARCHAR(n)1≦n≦16,000〔r〕VARCHARn*2r*2
    NVARCHAR(n)1≦n≦8,000〔r〕VARCHARn*4r*4
    MVARCHAR(n)1≦n≦16,000〔r〕VARCHARn*2r*2
    INTEGERCHAR8
    SMALLINTCHAR4
    DECIMAL(P,S)1≦P≦38
    0≦S≦38
    S≦P
    CHAR(↓P/2↓+1)*2
    FLOATCHAR16
    SMALLINTCHAR8
    DATECHAR8
    TIMECHAR6
    TIMESTAMP(p)p=0,2,4,又は6CHAR(7+p/2)*2
    INTERVAL YEAR TO DAYCHAR10
    INTERVAL HOUR TO SECONDCHAR8
    BINARY(n)1≦n≦16,000〔r〕VARCHARn*2r*2
    (凡例)
    P:精度
    S:位取り
    p:小数秒精度
    -:該当しません。
    値式に長さ0の文字列定数(各国,及び混在を含む)だけが指定された場合,実行結果の定義長は1になります。
     
  4. 値式のデータ型が文字データ型(CHAR,VARCHAR)の場合,そのデータ型の文字集合は任意です。
  5. 値式の演算結果が次に示すデータ型の場合は指定できません。
    • 最大長が16,001バイト以上のCHAR,VARCHAR,MCHAR,及びMVARCHAR
    • 最大長が8,001文字以上のNCHAR,及びNVARCHAR
    • BLOB
    • 最大長が16,001バイト以上のBINARY
    • BOOLEAN
  6. 埋込み変数,及び?パラメタを含む値式は指定できません。
  7. 値式中の演算項,又は関数の引数が定数だけの場合,結果の長さが256バイト以上は指定できません。
  8. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
  9. Windows版の場合,結果の値(DECIMAL型を除いた数データ)はリトルエンディアンの内部表現となります。具体的には,INTEGER型の1234の内部表現は"D2 04 00 00"となり,実行結果は"D2040000"となります。
  10. UNIX版の場合,結果の値はサーバのプラットフォームの内部表現に依存します。例えば,Intel系CPUで動作するLinuxの場合,DECIMAL型を除いた数データはリトルエンディアンの内部表現となります。具体的には,INTEGER型の1234の内部表現は"D2 04 00 00"となり,実行結果は"D2040000"となります。
  11. 結果のデータ型が文字データとなる場合,結果の文字集合は既定文字集合になります。

(11) HOUR

(a) 機能

時刻データ,時刻印データ,又は時間隔データから時間の部分だけを抽出します。

(b) 形式

 HOUR(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • CURRENT_TIME
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 時刻演算
    • 集合関数(MAX,MIN)
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,時刻データ型(TIME),時刻印データ型(TIMESTAMP),又は時間隔データ型(INTERVAL HOUR TO SECOND)にしてください。
  3. 結果のデータ型は,整数(INTEGER)になります。
  4. 値式が時刻データ型,又は時刻印データ型であれば,結果は0~23になります。
  5. 値式が時間隔データ型であれば,結果は-99~99になります。結果が0以外の場合,値式の符号と結果の符号は同じになります。
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
(d) 使用例

表T1のC1列(データ型:時刻データ型)のうち,現在と同じ時間の行をすべて検索します。

 SELECT * FROM T1
     WHERE HOUR (C1) = HOUR(CURRENT_TIME)

(12) INTEGER

(a) 機能

数データを,整数に変換します。

(b) 形式

 INT〔EGER〕(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 数定数
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 四則演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型として指定できるものを次に示します。
    • 数データ型
  3. 結果のデータ型は,整数(INTEGER)になります。
  4. 結果は,INTEGERで表現できる値にしてください。
  5. 結果の値で,小数点以下の数値は切り捨てられます。
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
(d) 使用例

表T1のC1列(データ型:DECIMAL(4,3))のうち,小数部分だけを取得します。

   SELECT C1 - INTEGER(C1) FROM T1

[図データ]

(13) IS_USER_CONTAINED_IN_HDS_GROUP

(a) 機能

実行ユーザがSun Java System Directory Serverのロールに属しているかどうかをBOOLEAN値で返します。

(b) 形式

 IS_USER_CONTAINED_IN_HDS_GROUP (値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • USER
    • 文字列定数又は混在文字列定数
    • 列指定(ディクショナリ表の列だけ指定できます)
    • コンポネント指定
    • SQL変数又はSQLパラメタ
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,文字列データ型(CHAR又はVARCHAR),又は混在文字列データ型(MCHAR又はMVARCHAR)にしてください。
  3. 値式の文字集合は既定文字集合にしてください。
  4. 値式の値には,ディレクトリサーバに登録しているロール名を指定してください。ロール名については,マニュアル「HiRDB Version 8 システム運用ガイド」を参照してください。また,ロール名の長さの制限については,「1.1.7 名前の指定」を参照してください。
  5. 値式中に列指定を指定する場合は,ディクショナリ表の列だけ指定できます。
  6. 値式には,複数の表の列を指定できません。IS_USER_CONTAINED_IN_HDS_GROUPを指定した述語をOR演算する場合,OR演算中には複数の表の列を指定できません。なお,AND演算をNOTで否定した場合もOR演算とみなされます。
  7. IS_USER_CONTAINED_IN_HDS_GROUPは,選択式,HAVING句には指定できません。
  8. リストを使用した検索中には指定できません。
  9. 外結合の結合表のON 探索条件にIS_USER_CONTAINED_IN_HDS_GROUPを指定する場合は,値式には外表の列を指定できません。
  10. FROM句に外結合の結合表を指定し,かつWHERE句にIS_USER_CONTAINED_IN_HDS_GROUPを指定する場合は,外結合の内表の列を指定できません。
  11. 値式中にディクショナリ表の列を指定しない場合,次の指定はできません。
    • FROM句に複数の表を指定
    • ORDER BY指定
    • DISTINCT指定
    • GROUP BY指定
    • 集合関数指定
    • FOR UPDATE指定
    • FOR READ ONLY指定
  12. FROM句には,ディクショナリ表を一つ以上指定してください。
  13. 結果のデータ型はBOOLEANになります。
  14. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値の場合,結果もナル値になります。
  15. ディレクトリサーバ連携機能を使用している場合,結果は次のようになります。
    • 実行ユーザがロールに属していない場合はFALSE
    • ロールがディレクトリサーバに登録されていない(ロールがない)場合はFALSE
    • 実行ユーザがロールに属している場合はTRUE
    • ロール名が重複して登録されている場合はFALSE
  16. ディレクトリサーバ連携機能を使用していない場合,結果は常にFALSEになります。
  17. 実行ユーザがHiRDBに接続してから,IS_USER_CONTAINED_IN_HDS_GROUPを実行中にディレクトリサーバ上のユーザ情報又はロール情報に変更があった場合,実行ユーザがロールに属しているかどうかの判定ができなくなったり,結果が変わることがあります。
(d) 使用例

Sun Java System Directory Serverに,「役職が部長」という条件のロールを指定して,部長ロール(BUTYOUROLE)が登録されているとします。そして,ユーザAが所有する表T1のSELECT権限を,部長ロールに与えます。更に,ユーザAが所有する表T2のSELECT権限をユーザBに与えます。このときに,ユーザBがアクセスできる表の名称を調べるためにIS_USER_CONTAINED_IN_HDS_GROUPを使用してディクショナリ表を検索する例を次に示します。

なお,実行者がアクセスできるのは,次の表です。

(14) LENGTH

(a) 機能

値式のデータの長さを求めます。

(b) 形式

 LENGTH({値式|GET_JAVA_STORED_ROUTINE_SOURCE指定})

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 定数
    • USER
    • CURRENT_DATE
    • CURRENT_TIME
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 四則演算
    • 日付演算
    • 時刻演算
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
    • :埋込み変数〔:標識変数〕 AS データ型 (データ型はBLOB型,又はBINARY型だけ)
    • ? AS データ型 (データ型はBLOB型,又はBINARY型だけ)
  2. 値式には,次のデータ型は指定できません。
    • BOOLEAN
    • 抽象データ型
  3. 値式に埋込み変数,又は?パラメタを指定する場合は,AS句でそのデータ型を指定してください。埋込み変数又は?パラメタに与えるデータの実長(位置付け子の場合は位置付け子に割り当てられたデータの実長)がAS句で指定したデータ型の最大長より大きい場合はエラーとなります。
  4. 結果のデータ型は,整数(INTEGER)になります。
  5. 値式のデータ型によって,実行結果が異なります。値式のデータ型による実行結果を次の表に示します。

    表2-35 スカラ関数LENGTHの値式のデータ型による実行結果

    値式のデータ型実行結果
    固定長文字データ既定文字集合の場合,定義長のバイト数
    既定文字集合以外の場合,定義長のその文字集合での文字数
    可変長文字データ既定文字集合の場合,実際のデータのバイト数
    既定文字集合以外の場合,実際のデータのその文字集合での文字数
    固定長各国文字データ定義長の文字数
    可変長各国文字データ実際のデータの文字数
    固定長混在文字データ実際のデータの文字数
    可変長混在文字データ実際のデータの文字数
    数データ定義長のバイト数
    ただし,DECIMALは,(↓精度で指定したけた数/2↓+1)になります。
    詳細については,「1.2 データ型」を参照してください。
    日付,時刻,時刻印データ定義長のバイト数
    日間隔,時間隔データ詳細については,「1.2 データ型」を参照してください。
    長大データ実際のデータのバイト数
    バイナリデータ実際のデータのバイト数
  6. 値式が文字データ型の場合,空白も1文字として数えます。
  7. 値式が定数の場合,HiRDBで解釈されたデータ型に従って処理されます。詳細については,「1.4 定数」を参照してください。
  8. 値式がUSER,CURRENT_DATE,CURRENT_TIME,又はCURRENT_TIMESTAMP〔(p)〕の場合,HiRDBで解釈されたデータ型に従って処理されます。詳細については,「1.5 USER,CURRENT_DATE値関数,CURRENT_TIME値関数,及びCURRENT_TIMESTAMP値関数」を参照してください。
  9. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。

(15) LOWER

(a) 機能

文字データ,各国文字データ,又は混在文字データ中の英大文字を英小文字に変換します。

(b) 形式

 LOWER(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 定数
    • USER
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式に,NULL,埋込み変数,及び?パラメタは指定できません。
  3. 値式のデータ型は,文字データ型(CHAR,VARCHAR),各国文字データ型(NCHAR,NVARCHAR),又は混在文字データ型(MCHAR,MVARCHAR)にしてください。
  4. 値式のデータ型が文字データ型(CHAR,VARCHAR)の場合,そのデータ型の文字集合は任意です。
  5. 結果のデータ型,及びデータ長は,値式のデータ型,及びデータ長と同じになります。
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
  7. 結果の文字集合は,引数に指定した値式の文字集合となります。

(16) MINUTE

(a) 機能

時刻データ,時刻印データ,又は時間隔データから,分の部分だけを抽出します。

(b) 形式

 MINUTE(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • CURRENT_TIME
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 時刻演算
    • 集合関数(MAX,MIN)
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,時刻データ型(TIME),時刻印データ型(TIMESTAMP),又は時間隔データ型(INTERVAL HOUR TO SECOND)にしてください。
  3. 結果のデータ型は,整数(INTEGER)になります。
  4. 値式が時刻データ型,又は時刻印データ型であれば,結果は0~59になります。
  5. 値式が時間隔データ型であれば,結果は-59~59になります。結果が0以外の場合,値式の符号と結果の符号は同じになります。
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
(d) 使用例

表T1のC2列(データ型:時刻データ型)とC3列(データ型:時刻データ型)の差が,30分以内のデータを検索します。

   SELECT C1 FROM T1
       WHERE MINUTE(C3-C2) <= 30

[図データ]

(17) MOD

(a) 機能

剰余を返します。

(b) 形式

 MOD(値式1,値式2)

(c) 規則
  1. 値式1,及び値式2に指定できるものを次に示します。
    • 整数定数,又は10進数定数
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 四則演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式1には被除数を,値式2には除数を指定します。
  3. 値式1,又は値式2のデータ型は,次に示すどちらかにしてください。
    • 整数(INTEGER,SMALLINT)
    • 固定小数点数(DECIMAL)
  4. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式1,又は値式2がナル値であれば,結果もナル値になります。
  5. 値式1,又は値式2に小数部を含む場合,結果の値にも小数部を含みます。
  6. 結果の符号は,値式1の符号と同じになります。
  7. 値式2が0の場合,エラーになります。なお,オーバフローエラー抑止が設定されている場合の結果については,「2.18 オーバフローエラー抑止が設定されている場合の演算結果」を参照してください。
  8. 次の式が成立する場合,計算途中でオーバフローが発生するため,オーバフローエラーになります。
     (p1-s1)+s2>max_prec
      p1:値式1の値の実行的な精度
      s1:値式1の値の実行的な位取り
      p2:値式2の値の実行的な精度
      s2:値式2の値の実行的な位取り
      max_prec:精度の最大値です。精度の最大値max_precを次の表に示します。

    表2-36 精度の最大値max_prec

    システム共通定義pd_sql_dec_op_maxprecオペランドp1とp2max_precの値
    29又は省略p1≦29かつp2≦2929
    p1>29又はp2>2938
    38任意38
    注※
    システム共通定義のpd_sql_dec_op_maxprecオペランドについては,マニュアル「HiRDB Version 8 システム定義」を参照してください。
    なお,オーバフローエラー抑止が設定されている場合の結果については,「2.18 オーバフローエラー抑止が設定されている場合の演算結果」を参照してください。
  9. 結果のデータ型と値式1,及び値式2のデータ型の関係を次の表に示します。

    表2-37 結果のデータ型と値式1,及び値式2のデータ型の関係

    値式1のデータ型値式2のデータ型
    SMALLINTINTEGERDECIMAL
    SMALLINTSMALLINTINTEGERDECIMAL
    INTEGERSMALLINTINTEGERDECIMAL
    DECIMAL(p,0)SMALLINTINTEGERDECIMAL
    DECIMAL(p,s)
    (s > 0)
    DECIMALDECIMALDECIMAL
  10. 結果のデータ型がDECIMALの場合の結果の精度と位取りを次の表に示します。

    表2-38 結果のデータ型がDECIMALの場合の結果の精度と位取り

    剰余結果の精度と位取り精度と位取り
    精度(p)p=MIN(p2-s2+s,max_prec)
    位取り(s)s=MAX(s1,s2)
    注1
    値式1のデータ型:DECIMAL(p1,s1)
    値式2のデータ型:DECIMAL(p2,s2)
    注2
    INTEGERは,DECIMAL(10,0)として扱われます。
    SMALLINTは,DECIMAL(5,0)として扱われます。
    注3
    max_precは,精度の最大値で,「表2-36 精度の最大値max_prec」のようになります。

(18) MONTH

(a) 機能

日付データ,時刻印データ,又は日間隔データから月の部分だけを抽出します。

(b) 形式

 MONTH(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • CURRENT_DATE
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 日付演算
    • 集合関数(MAX,MIN)
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,日付データ型(DATE),時刻印データ型(TIMESTAMP),又は日間隔データ型(INTERVAL YEAR TO DAY)にしてください。
  3. 結果のデータ型は,整数(INTEGER)になります。
  4. 値式が日付データ型,又は時刻印データ型であれば,結果は1~12になります。
  5. 値式が日間隔データ型であれば,結果は-11~11になります。結果が0以外の場合,値式の符号と結果の符号は同じになります。
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
(d) 使用例

表T1のうち,当月(9月)でない行をすべて削除します。

   DELETE FROM T1
       WHERE MONTH(C1) < > MONTH(CURRENT_DATE)

[図データ]

(19) POSITION

(a) 機能

データ列(文字列又はバイナリ列)中で,部分データ列に最初に一致する部分の開始位置を求めます。

(b) 形式

 POSITION(値式1 IN 値式2〔 FROM 値式3〕)

(c) 規則
  1. 値式1には検索する部分データ列を指定します。値式2には検索対象のデータ列を指定します。値式1,及び値式2に指定できるものを次に示します。ただし,値式1及び値式2のデータ型の組み合わせによって指定できるものが異なります。指定できるものの組み合わせは規則2.を参照してください。
    • 定数(文字列,各国文字列,混在文字列,又は16進文字列)
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
    • :埋込み変数〔:標識変数〕 AS データ型 (データ型はBLOB型,又はBINARY型だけ)
    • ? AS データ型 (データ型はBLOB型,又はBINARY型だけ)
  2. 値式1,及び値式2に指定できるデータ型の組み合わせを次の表に示します。

    表2-39 スカラ関数POSITIONの値式1及び値式2に指定できるデータ型の組み合わせ

    値式1値式2
    文字列
    データ型
    各国文字列データ型混在文字列データ型BLOB型最大長が32,000バイト以下のBINARY型最大長が32,001バイト以上のBINARY型
    文字列データ型※3
    (表2-40)
    ×※4
    (表2-40)
    ※1
    (表2-41)
    ※1
    (表2-40)
    ※1
    (表2-41)
    各国文字列データ型×
    (表2-40)
    ××××
    混在文字列データ型※4
    (表2-40)
    ×
    (表2-40)
    ×××
    BLOB型※2
    (表2-42)
    ××
    (表2-41)

    (表2-42)

    (表2-41)
    最大長が32,000バイト以下のBINARY型※2
    (表2-40)
    ××
    (表2-41)

    (表2-40)

    (表2-41)
    最大長が32,001バイト以上のBINARY型※2
    (表2-42)
    ××
    (表2-41)

    (表2-42)

    (表2-41)
    (凡例)
    ○:指定できます。
    △:制限付きで指定できます。
    ×:指定できません。
    (表番号):指定できる場合の,対応する項目の組み合わせ表
    注※1
    値式1が16進文字列定数の場合だけ指定できます。
    注※2
    値式2が16進文字列定数の場合だけ指定できます。
    注※3
    値式1と値式2が両方とも文字列データ型の場合,値式1と値式2の文字集合は同じにしてください。ただし,値式1が次に示す値式である場合,値式2の文字集合に変換します。
    ・文字列定数
    注※4
    文字列データ型の値式の文字集合が既定文字集合以外の場合は指定できません。
  3. 値式1,及び値式2の指定できる項目の組み合わせを次に示します。

    表2-40 スカラ関数POSITIONの値式1及び値式2に指定できる項目の組み合わせ(値式1,及び値式2が共に文字列データ型,各国文字列データ型,混在文字列データ型,又は最大長が32,000バイト以下のBIANRY型の場合)

    値式1値式2
    定数列指定コンポネント指定SQL変数,SQLパラメタ連結演算集合関数スカラ関数CASE式CAST指定関数呼出しスカラ副問合せ埋込み変数,?パラメタ
    定数
    列指定
    コンポネント指定
    SQL変数,
    SQLパラメタ
    連結演算
    集合関数
    スカラ関数
    CASE式
    CAST指定
    関数呼出し
    埋込み変数,
    ?パラメタ
    (凡例)
    ○:指定できます。
    注※
    埋込み変数,?パラメタはBINARY型の場合だけ指定できます。
     

    表2-41 スカラ関数POSITIONの値式1及び値式2に指定できる項目の組み合わせ(値式2がBLOB型,又は最大長が32,001バイト以上のBINARY型の場合)

    値式1値式2
    定数列指定コンポネント指定SQL変数,SQLパラメタ連結演算集合関数スカラ関数CASE式CAST指定関数呼出しスカラ副問合せ埋込み変数,?パラメタ
    定数×××××××××
    列指定××××××××××××
    コンポネント指定××××××××××××
    SQL変数,
    SQLパラメタ
    ×××××××××
    連結演算××××××××××××
    集合関数××××××××××××
    スカラ関数××××××××××××
    CASE式××××××××××××
    CAST指定××××××××××××
    関数呼出し××××××××××××
    埋込み変数,
    ?パラメタ
    ×××××××××
    (凡例)
    ○:指定できます。
    ×:指定できません。
    注※
    定数は文字列データ型(16進文字列定数)の場合だけ指定できます。
     

    表2-42 スカラ関数POSITIONの値式1及び値式2に指定できる項目の組み合わせ(値式1がBLOB型,又は最大長が32,001バイト以上のBINARY型,値式2が文字列データ型,又は最大長が32,000バイト以下のBIANRY型の場合)

    値式1値式2
    定数列指定コンポネント指定SQL変数,SQLパラメタ連結演算集合関数スカラ関数CASE式CAST指定関数呼出しスカラ副問合せ埋込み変数,?パラメタ
    定数××××××××××××
    列指定××××××××××××
    コンポネント指定××××××××××××
    SQL変数,
    SQLパラメタ
    連結演算××××××××××××
    集合関数××××××××××××
    スカラ関数××××××××××××
    CASE式××××××××××××
    CAST指定××××××××××××
    関数呼出し××××××××××××
    埋込み変数,
    ?パラメタ
    (凡例)
    ○:指定できます。
    ×:指定できません。
    注※
    埋込み変数,?パラメタはBINARY型の場合だけ指定できます。
  4. 値式1及び値式2に埋込み変数,又は?パラメタを指定する場合は,AS句でそのデータ型を指定してください。埋込み変数又は?パラメタに与えるデータの実長(位置付け子の場合は位置付け子に割り当てられたデータの実長)がAS句で指定したデータ型の最大長より大きい場合はエラーとなります。
  5. 値式3は検索開始位置を指定します。次に,値式2と値式3の単位と値の範囲の関係を示します。
    • 値式2が,文字集合が既定文字集合の文字列データ型,BLOB型,又はBINARY型の場合
      値式3はバイト単位で指定します。値式3の値は次の範囲にしてください。
      ・値式2のデータ型が,文字集合が既定文字集合の文字列データ型の場合は,1≦(値式3)≦(値式2の最大長)
      ・値式2のデータ型がBLOB型又はBINARY型の場合は,1≦(値式3)
    • 値式2が,各国文字列データ型又は混在文字列データ型の場合
      値式3は文字単位で指定します。値式3の値は1≦(値式3)≦(値式2の最大長)の範囲にしてください。なお,混在文字列データ型の場合,値式2の最大長の単位はバイトです。
    • 値式2が,文字集合が既定文字集合以外の文字列データ型の場合
      値式3は文字単位で指定します。値式3の値は1≦(値式3)≦(値式2の最大長)÷cの範囲にしてください。cの値は,その文字集合の文字の最小バイト数で,EBCDIKの場合は1,UTF16の場合は2となります。なお,値式2の最大長の単位はバイトです。
    値式3を省略した場合,検索開始位置は1を仮定します。
  6. 値式3に指定できるものを次に示します。
    • 符号なし整数定数
    • 列指定
    • コンポネント指定
    • 四則演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
    • SQL変数又はSQLパラメタ
    • 埋込み変数又は?パラメタ
    ただし,値式1,又は値式2がBLOB型,又は最大長が32,001バイト以上のBINARY型の場合,値式3には次のものが指定できます。
    • 符号なし整数定数
    • SQL変数又はSQLパラメタ
    • 埋込み変数又は?パラメタ
  7. 値式3のデータ型は,整数(INTEGER,SMALLINT)にしてください。
  8. 結果のデータ型は,整数(INTEGER)になります。
  9. 結果は値式2が,文字集合が既定文字集合の文字列データ型,BLOB型,又はBINARY型の場合はバイト単位,文字集合が既定文字集合以外の文字列データ型,各国文字列データ型又は混在文字列データ型の場合は文字単位の位置となります。
  10. 値式1の実長が0の場合,結果は値式3の値になります。ただし,値式3を省略した場合は1になります。
  11. 値式1の実長が0より大きく,値式3が値式2の実長より大きい値の場合,結果は0になります。
  12. 値式1の部分データ列が値式2のデータ列中の検索開始位置以降に出現しない場合は,結果は0になります。
  13. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式1,値式2,又は値式3がナル値であれば,結果もナル値になります。
(d) 使用例

表T1のC1列(データ型:CHAR)の6バイト目以降に,最初に'TIME:'が出現する位置を検索します。

   SELECT POSITION('TIME:' IN C1 FROM 6) FROM T1

[図データ]

(20) SECOND

(a) 機能

時刻データ,時刻印データ,又は時間隔データから,秒の部分だけを抽出します。

(b) 形式

 SECOND(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • CURRENT_TIME
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 時刻演算
    • 集合関数(MAX,MIN)
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,時刻データ型(TIME),時刻印データ型(TIMESTAMP),又は時間隔データ型(INTERVAL HOUR TO SECOND)にしてください。
  3. 結果のデータ型は,整数(INTEGER)になります。
  4. 値式が時刻データ型,又は時刻印データ型であれば,結果は0~59になります。また,うるう秒を含んだ時刻データ又は時刻印データであれば,結果は0~61になります。なお,うるう秒を含んだ時刻データ又は時刻印データを指定する方法については,マニュアル「HiRDB Version 8 システム定義」のpd_leap_secondオペランドの説明を参照してください。
  5. 値式が時間隔データ型であれば,結果は-59~59になります。結果が0以外の場合,値式の符号と結果の符号は同じになります。
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
(d) 使用例

表T1のC1列(データ型:時刻データ型)のうち,最も早い時刻と最も遅い時刻の差を秒単位で取得します。

   SELECT MINUTE(MAX(C1)-MIN(C1))
           *60+SECOND(MAX(C1)
           -MIN(C1))
       FROM T1

[図データ]

(21) SUBSTR

(a) 機能

文字列データ,各国文字列データ,混在文字列データ,又はバイナリデータの一部を抽出します。

(b) 形式

 SUBSTR(値式1,値式2〔,値式3〕)

(c) 規則
  1. 値式1には,処理対象となるデータ列(文字列又はバイナリ列)を指定します。値式1に指定できるものを次に示します。ただし,値式1のデータ型によって指定できるものが異なります。
    • 定数(文字列,各国文字列,又は混在文字列)
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
    • :埋込み変数〔:標識変数〕 AS データ型 (データ型はBLOB型,又はBINARY型だけ)
    • ? AS データ型 (データ型はBLOB型,又はBINARY型だけ)
    各データ型で指定できるものを次の表に示します。

    表2-43 スカラ関数SUBSTRの値式1のデータ型による指定できる項目

    項目値式1のデータ型
    文字列データ型,
    各国文字列データ型,
    混在文字列データ型
    最大長が32,000バイト以下のBINARY型BLOB型,
    最大長が32,001バイト以上のBINARY型
    定数××
    列指定
    コンポネント指定×
    SQL変数
    SQLパラメタ
    連結演算
    集合関数
    スカラ関数
    CASE式
    CAST指定
    ×
    関数呼出し
    スカラ副問合せ×
    埋込み変数
    ?パラメタ
    ×
    (凡例)
    ○:指定できます。
    ×:指定できません。
  2. 値式1のデータ型は,次のどれかを指定してください。
    • 任意の文字集合の文字列データ型(CHAR,VARCHAR)
    • 各国文字列データ型(NCHAR,NVARCHAR)
    • 混在文字列データ型(MCHAR,MVARCHAR)
    • BLOB型,又はBINARY型
  3. 値式1に埋込み変数又は?パラメタを指定する場合は,AS句でそのデータ型を指定してください。埋込み変数又は?パラメタに与えるデータの実長(位置付け子の場合は位置付け子に割り当てられたデータの実長)がAS句で指定したデータ型の最大長より大きい場合はエラーとなります。
  4. 値式2には,取り出す部分データ列の開始位置を正の整数で指定します。次に,値式1と値式2の単位と値の範囲の関係を示します。
    • 値式1が,文字集合が既定文字集合の文字列データ型,BLOB型,又はBINARY型の場合
      値式2はバイト単位で指定します。値式2の値は次の範囲にしてください。
      ・値式1のデータ型が,文字集合が既定文字集合の文字列データ型の場合は,1≦(値式2)≦(値式1の最大長)
      ・値式1のデータ型がBLOB型又はBINARY型の場合は,1≦(値式2)
    • 値式1が,各国文字列データ型又は混在文字列データ型の場合
      値式2は文字単位で指定します。値式2の値は1≦(値式2)≦(値式1の最大長)の範囲にしてください。なお,混在文字列データ型の場合,値式1の最大長の単位はバイトです。
    • 値式1が,文字集合が既定文字集合以外の文字列データ型の場合
      値式2は文字単位で指定します。値式2の値は1≦(値式2)≦(値式1の最大長)÷cの範囲にしてください。cの値は,その文字集合の文字の最小バイト数で,EBCDIKの場合は1,UTF16の場合は2です。なお,値式1の最大長の単位はバイトです。
  5. 値式3には,取り出す部分データ列の長さを正の整数で指定します。次に,値式1と値式3の単位と値の範囲の関係を示します。
    • 値式1が,文字集合が既定文字集合の文字列データ型,BLOB型,又はBINARY型の場合
      値式3はバイト単位で指定します。値式3の値は次の範囲にしてください。
      ・値式1のデータ型が,文字集合が既定文字集合の文字列データ型の場合は,0≦(値式3)≦(値式1の最大長)-(値式2)+1
      ・値式1のデータ型がBLOB型又はBINARY型の場合は,0≦(値式3)
    • 値式1が,各国文字列データ型又は混在文字列データ型の場合
      値式3は文字単位で指定します。値式3の値は0≦(値式3)≦(値式1の最大長)-(値式2)+1の範囲にしてください。なお,混在文字列データ型の場合,値式1の最大長の単位はバイトです。
    • 値式1が,文字集合が既定文字集合以外の文字列データ型の場合
      値式3は文字単位で指定します。値式3の値は0≦(値式3)≦(値式1の最大長)÷c-(値式2)+1の範囲にしてください。cの値は,その文字集合の文字の最小バイト数で,EBCDIKの場合は1,UTF16の場合は2です。なお,値式1の最大長の単位はバイトです。
    値式3には定数の0は指定できません。
  6. 値式2,及び値式3に指定できるものを次に示します。
    • 符号なし整数定数
    • 列指定
    • コンポネント指定
    • 四則演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • SQL変数又はSQLパラメタ
    • 埋込み変数又は?パラメタ
    • スカラ副問合せ
    ただし,値式1がBLOB型,又は最大長が32,001バイト以上のBINARY型の場合,値式2及び値式3には次のものが指定できます。
    • 符号なし整数定数
    • SQL変数又はSQLパラメタ
    • 埋込み変数又は?パラメタ
  7. 値式2,及び値式3のデータ型は,整数(INTEGER,SMALLINT)にしてください。
  8. 値式2が,値式1の実長より大きい値の場合,結果はナル値(結果の長さは0)になります。
  9. 結果のデータの長さが0の場合,その結果はナル値になります。
  10. 値式3を省略した場合,値式1が固定長データのときは,値式2の開始位置から定義長の最後の文字まで取り出します。また,値式1が可変長データの場合は,値式2の開始位置から実長の最後の文字まで取り出します。
  11. 値式1がBLOB型で値式3を省略しない場合,指定した範囲のデータ列の中で実データの含まれていない部分があるときは,実データの含まれている部分だけを取り出します。
  12. 結果の値は,非ナル値制約なし(ナル値を許します)になります。
  13. 値式1,値式2,値式3のどれかがナル値であれば,結果もナル値になります。
  14. 結果のデータ型と長さを次に示します。

    表2-44 スカラ関数SUBSTRの結果のデータ型と長さ(値式1のデータ型が既定文字集合の文字列型,各国文字型,混在文字型,BLOB型又はバイナリ型で,値式3を指定した場合)

    部分列を抽出する文字列(値式1)のデータ型実長長さL(値式3)
    定数(文字列)定数以外
    L1≦255L1≧256
    CHAR(n)CHAR(L)VARCHAR(L)〔L〕VARCHAR(n)〔L〕
    VARCHAR(n)〔r〕
    NCHAR(n)NCHAR(L)NVARCHAR(L)〔L〕NVARCHAR(n)〔L〕
    NVARCHAR(n)〔r〕
    MCHAR(n)MCHAR(L1MVARCHAR(L1)〔L2MVARCHAR(n)〔L2
    MVARCHAR(n)〔r〕
    BLOB(n)〔r〕BLOB(L)〔k5BLOB(L)〔k5BLOB(n)〔k5
    BINARY(n)〔r〕BINARY(L)〔k5〕BINARY(L)〔k5BINARY(n)〔k5
(凡例)
〔 〕:きっ甲内の値は,実長を示します。
L1
  • 文字列データ型の場合,値式3の長さL(バイト単位)
  • 各国文字列データ型の場合,値式3の長さL(文字単位)×2
  • 混在文字列データ型の場合,min(値式3の長さL(文字単位)×c,n)
L2
抽出したL文字の部分文字列のバイト数(L≦L2≦L1
n:
処理対象となるデータ列(値式1)の定義長
文字列データ型,混在文字列データ型,及びBLOB型の場合はバイト単位
各国文字列データ型の場合は文字単位
k5
min(L,r-S+1)
c:
1文字を表現する最大バイト数
次の表に,文字コードごとの最大バイト数を示します。
pdntenv及びpdsetupで指定する
文字コード種別
最大バイト数(byte)
sjis2
ujis2
chinese2
chinese-gb180304
lang-c2
utf-83~6
注※
pdntenvコマンド(UNIX版の場合はpdsetupコマンド)で文字コード種別にutf-8を指定した場合は次の指定に従います。
  • システム共通定義pd_substr_length
  • クライアント環境定義PDSUBSTRLEN
  • SQLコンパイルオプションSUBSTR LENGTH
-:
該当しません。
注1
値式1が可変長文字列の場合,取り出そうとする文字列中で実データの含まれていない部分には,空白が設定されます。
(例)
VARCHAR(8)〔5〕の文字列1に対して,SUBSTR(文字列1,3,5)を実行すると,取り出す文字列の右側2文字には空白が設定されます。
なお,値式1がBLOB型又はBINARY型で値式3を省略しない場合,指定した範囲のバイナリ列の中で,実データが含まれていない部分があるときは,実データの含まれている部分だけを取り出します。空白は設定されません。
(例)
BLOB(1024)〔512〕のバイナリデータ1に対して,SUBSTR(バイナリデータ1,101,600)を実行すると,バイナリデータ1の101バイト目から512バイト目までが結果となります。

表2-45 スカラ関数SUBSTRの結果のデータ型と長さ(値式1のデータ型が既定文字集合の文字列型,各国文字型,混在文字型,BLOB型又はバイナリ型で,値式3を省略した場合)

部分列を抽出する文字列(値式1)のデータ型実長開始位置S(値式2)
定 数(文字列)定数以外
値式1が固定長値式1が可変長
k0≦255k0≧256
CHAR(n)CHAR(k1VARCHAR(n)〔k1VARCHAR(n)〔k1
VARCHAR(n)〔r〕VARCHAR(n)〔k2VARCHAR(n)〔k2
NCHAR(n)NCHAR(k1NVARCHAR(n)〔k1NVARCHAR(n)〔k1
NVARCHAR(n)〔r〕NVARCHAR(n)〔k2NVARCHAR(n)〔k2
MCHAR(n)MCHAR(k1MVARCHAR(n)〔k3MVARCHAR(n)〔k3
MVARCHAR(n)〔r〕MVARCHAR(n)〔k4MVARCHAR(n)〔k4
BLOB(n)〔r〕BLOB(n)〔k2BLOB(n)〔k2
BINARY(n)〔r〕BINARY(n)〔k2BINARY(n)〔k2
(凡例)
〔 〕:きっ甲内の値は,実長を示します。
n:
  • 文字列データ型の場合は,バイト単位
  • 混在文字列データ型の場合は,バイト単位
  • 各国文字列データ型の場合は,文字単位
k0
文字列データ型,又は混在文字列データ型の場合,n-S+1
各国文字列データ型の場合,(n-S+1)×2
k1
n-S+1
k2
max(r-S+1,0)
k3
S文字目からnバイト目までの部分文字列のバイト数
max(n-(S-1)×c,0)≦k 3≦n-S+1
k4
S文字目からrバイト目までの部分文字列のバイト数
max(r-(S-1)×c,0))≦k 4≦max(r-S+1,0)
c:
1文字を表現する最大バイト数
詳細については,「表 2-44スカラ関数SUBSTRの結果のデータ型と長さ(値式1のデータ型が既定文字集合の文字列型,各国文字型,混在文字型,BLOB型又はバイナリ型で,値式3を指定した場合)」の,凡例のcを参照してください。
-:
該当しません。
値式1が可変長文字列で値式3を省略すると,k 2又はk 4が0であれば結果はナル値になります。

表2-46 スカラ関数SUBSTRの結果のデータ型と長さ(値式1のデータ型が既定文字集合以外の文字列型で,値式3を指定した場合)

部分列を抽出する文字列(値式1)のデータ型実長長さL(値式3)
定数(文字列)定数以外
L1≦255L1≧256
CHAR(n)CHAR(L1VARCHAR(L1)〔L2VARCHAR(n)〔L2
VARCHAR(n)
(凡例)
〔 〕:きっ甲内の値は,実長を示します。
L1
min(値式3の長さL×c,n)
L2
抽出したL文字の部分文字列のバイト数(L≦L2≦L1
c:
値式結果の文字集合がEBCDIKの場合は1,UTF16の場合は4
n:
処理対象となるデータ列(値式1)の定義長(バイト単位)
-:
該当しません。
値式1が可変長文字列の場合,取り出そうとする文字列中で実データの含まれていない部分には,その文字集合の空白が設定されます。

表2-47 スカラ関数SUBSTRの結果のデータ型と長さ(値式1のデータ型が既定文字集合以外の文字列型で,値式3を省略した場合)

部分列を抽出する文字列(値式1)のデータ型実長開始位置S(値式2)
定 数(文字列)定数以外
値式1が固定長値式1が可変長
k0≦255k0≧256
CHAR(n)CHAR(k0VARCHAR(n)〔k1VARCHAR(n)〔k1
VARCHAR(n)〔r〕VARCHAR(n)〔k2VARCHAR(n)〔k2
(凡例)
〔 〕:きっ甲内の値は,実長を示します。
n:
処理対象となるデータ列(値式1)の定義長(バイト単位)
k0
n-(S-1) ×c1
k1
Sバイト目からnバイト目までの部分列のバイト数max(n-(S-1)×c2,0)≦k1≦(n-(S-1) ×c1
k2
Sバイト目からrバイト目までの部分列のバイト数max(r-(S-1)×c2,0)≦k2≦max(r-(S-1)×c1,0)
c1
1文字を表現する最小バイト数
値式結果の文字集合がEBCDIKの場合は1,UTF16の場合は2
c2
1文字を表現する最大バイト数
値式結果の文字集合がEBCDIKの場合は1,UTF16の場合は4
-:
該当しません。
値式1が可変長文字列で値式3を省略すると,k2が0であれば結果はナル値になります。
(d) 使用例

表T1のC1列(データ型:CHAR)のうち,入社年度(C1列の2文字目から2文字分)が'95年の行を検索します。

   SELECT C1 FROM T1
       WHERE SUBSTR(C1,2,2) = '95'

[図データ]

(22) TIME

(a) 機能

指定した書式の時刻の文字列表現を,時刻データに変換します。

(b) 形式

 TIME(値式〔,日時書式〕)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 時刻の文字列表現の定数
    • CURRENT_TIME
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 演算結果が時刻データとなる時刻演算
    • 連結演算
    • 集合関数(MAX,MIN)
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式は,次のデータ型にしてください。
    • 日時書式を指定した場合
      ・定義長が6~255の文字データ型(CHAR,VARCHAR)。ただし,文字集合がUTF16の場合は,定義長が12~510の文字データ型(CHAR,VARCHAR)。
      ・混在文字データ型(MCHAR,MVARCHAR)
    • 日時書式を指定しない場合
      ・定義長が8バイトの文字データ型(CHAR,VARCHAR)。ただし,文字集合がUTF16の場合は,定義長が16バイトの文字データ型(CHAR,VARCHAR)。
      ・時刻データ型(TIME)
  3. 値式は,日時書式で指定した書式の,時刻の文字列表現にしてください。日時値式のデータ型が文字データ型(CHAR,VARCHAR)の場合,そのデータ型の文字集合は任意です。
  4. 値式は,日時書式で指定した書式の,時刻の文字列表現にしてください。日時書式を省略した場合は,時刻の既定の文字列表現にしてください。
    (例)
    日時書式'HH-MI-SS'の場合→'13-45-17'
    日時書式を省略した場合→'13:45:17'
  5. 値式が時刻データ型の場合,結果はその時刻になります。
  6. 日時書式については,「1.11 日時書式の指定」を参照してください。
  7. 結果のデータ型は,時刻データ型(TIME)になります。
  8. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式,又は日時書式がナル値であれば,結果もナル値になります。
  9. 日時書式を指定した場合,値式と日時書式の文字集合は同じにしてください。ただし,日時書式が次に示す値式である場合,値式の文字集合に変換します。
    • 文字列定数
(d) 使用例
  1. 表T1のC1列(データ型:CHAR)のうち,最も早い時刻と最も遅い時刻の差を取得します。

       SELECT MAX(TIME(C1))-MIN(TIME(C1))
           FROM T1

    [図データ]

  2. 表T2のC1列(データ型:CHAR)の,時刻の既定の文字列表現以外の書式('HHMISS')で表現した文字列から,時刻データを取得します。

       SELECT TIME(C1,'HHMISS') FROM T2

    [図データ]

(23) TIMESTAMP

(a) 機能
  1. 時刻印の既定の文字列表現を,時刻印データに変換します。
  2. 西暦1年1月1日からの通算日数を,それが示す時刻印データに変換します。
  3. 日付データと時刻データから,それらを組み合わせた時刻印データに変換します。
(b) 形式
機能1.の形式

 TIMESTAMP(値式)

機能2.の形式

 TIMESTAMP(値式)

機能3.の形式

 TIMESTAMP(値式1,値式2)

(c) 機能1.の規則
  1. 値式に指定できるものを次に示します。
    • 時刻印の,既定の文字列表現の定数
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数又はSQLパラメタ
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 指定できるデータ型を次に示します。
    • 定義長が19~26バイトの文字データ型(CHAR,VARCHAR)。ただし,文字集合がUTF16の場合は,定義長が38~52バイトの文字データ型(CHAR,VARCHAR)。
    • 時刻印データ型(TIMESTAMP)
  3. 値式のデータ型が文字データ型(CHAR,VARCHAR)の場合,そのデータ型の文字集合は任意です。
  4. 値式に文字データ型を指定する場合は,時刻印の既定の文字列表現にしてください。
  5. 値式が時刻印データ型の場合,結果はその時刻印になります。
  6. 結果のデータ型は,時刻印データ型(TIMESTAMP)になり,次の小数秒精度になります。
    • 値式が文字データ型の場合は,値式の時刻印の既定の文字列表現に従う小数秒精度となります。
    • 値式が時刻印データの場合は,その時刻印データの小数秒精度となります。
(d) 機能2.の規則
  1. 値式に指定できるものを次に示します。
    • 数定数
    • 列指定
    • コンポネント指定
    • SQL変数又はSQLパラメタ
    • 四則演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,整数(INTEGER)にしてください。また,四則演算,スカラ関数,CASE式,CAST指定,関数呼出し,又は集合関数を指定した場合,演算の結果を整数のデータ型にする必要があります。
  3. 値式の範囲は,1~3,652,059にしてください。
  4. 結果は,西暦1年1月1日から,(指定した数値-1)日後の時刻印になります。また,結果の時刻部分は0時0分0秒になります。
    (例)
    値式が35の場合→西暦1年2月4日0時0分0秒
(e) 機能3.の規則
  1. 値式1に指定できるものを次に示します。
    • 日付の既定の文字列表現の定数
    • CURRENT_DATE
    • 列指定
    • コンポネント指定
    • SQL変数又はSQLパラメタ
    • 演算結果が日付データ型となる日付演算
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式1に指定できるデータ型を次に示します。
    • 定義長が10バイトの文字データ型(CHAR,VARCHAR)。ただし,文字集合がUTF16の場合は,定義長が20バイトの文字データ型(CHAR,VARCHAR)。
    • 日付データ型(DATE)
  3. 値式1のデータ型が文字データ型(CHAR,VARCHAR)の場合,そのデータ型の文字集合は任意です。
  4. 値式1は,日付の既定の文字列表現にしてください。
    (例)
    '1995-06-30'
  5. 値式2に指定できるものを次に示します。
    • 時刻の既定の文字列表現の定数
    • CURRENT_TIME
    • 列指定
    • コンポネント指定
    • SQL変数又はSQLパラメタ
    • 演算結果が時刻データとなる時刻演算
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  6. 値式2に指定できるデータ型を次に示します。
    • 定義長が8バイトの文字データ型(CHAR,VARCHAR)。ただし,文字集合がUTF16の場合は,定義長が16バイトの文字データ型(CHAR,VARCHAR)。
    • 時刻データ型(TIME)
  7. 値式2のデータ型が文字データ型(CHAR,VARCHAR)の場合,そのデータ型の文字集合は任意です。
  8. 値式2は,時刻の既定の文字列表現にしてください。
    (例)
    '13:45:17'
  9. 値式1と値式2に指定する文字集合は同じにしてください。ただし,値式1と値式2のどちらかが次に示す値式の場合,対応する値式の文字集合に変換します。
    • 文字列定数
(f) 共通規則
  1. 結果のデータ型は,時刻印データ型(TIMESTAMP)になります。
  2. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
(g) 使用例
  1. 表T1のC1列(データ型:時刻印データ型)のうち,指定した時刻印以降のデータを検索します。

     SELECT C1 FROM T1
         WHERE C1 >= TIMESTAMP('2000-01-01 00:00:00.00')

    [図データ]

  2. 表T1のC1列(データ型:数データ型)を時刻印データに変換して,表T2のC1列(データ型:時刻印データ型)に挿入します。

     INSERT INTO T2(C1) SELECT TIMESTAMP(C1) FROM T1

    [図データ]

  3. 表T1のC1列(データ型:日付データ型)と,表T1のC2列(データ型:時刻データ型)とを組み合わせたデータを,表T2のC1列(データ型:時刻印データ型)に挿入します。

     INSERT INTO T2(C1) SELECT TIMESTAMP(C1,C2) FROM T1

    [図データ]

(24) TIMESTAMP_FORMAT

(a) 機能

指定した日時書式に従った時刻印の文字列表現を,時刻印データに変換します。

(b) 形式

 TIMESTAMP_FORMAT (値式,日時書式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 時刻印の文字列表現の定数
    • 列指定
    • コンポネント指定
    • SQL変数又はSQLパラメタ
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式は次のデータ型にしてください。
    • 定義長が14~255バイトの文字データ型(CHARACTER,VARCHAR)。ただし,文字集合がUTF16の場合は,定義長が28~510バイトの文字データ型(CHARACTER,VARCHAR)。
    • 混在文字データ型(MCHAR,MVARCHAR)
  3. 値式のデータ型が文字データ型(CHAR,VARCHAR)の場合,そのデータ型の文字集合は任意です。
  4. 値式は,日時書式で指定した書式の,時刻印の文字列表現にしてください。
    (例)
    日時書式'YYYY/MM/DD HH-MI-SS.NNNN'の場合
    →'2002/06/30 10-45-30.1523'
  5. 日時書式については,「1.11 日時書式の指定」を参照してください。
  6. 結果のデータ型は時刻印データ型(TIMESTAMP)となります。また,小数秒精度は6になります。
  7. 値式と日時書式に指定する文字集合は同じにしてください。ただし,日時書式が次の場合,対応する値式の文字集合に変換します。
    • 文字列定数
(d) 共通規則
  1. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式,又は日時書式がナル値であれば,結果もナル値になります。
(e) 使用例

表T1のC1列(データ型:CHAR)の,時刻印の既定の文字列表現以外の書式('DD/MON/YYYY HH-MI-SS NNNN')で表現した文字列から,時刻印データを取得します。

 SELECT TIMESTAMP_FORMAT(C1,'DD/MON/YYYY HH-MI-SS NNNN') FROM T1

[図データ]

(25) UPPER

(a) 機能

文字データ,各国文字データ,又は混在文字データ中の英小文字を英大文字に変換します。

(b) 形式

 UPPER(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 定数
    • USER
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 連結演算
    • 集合関数
    • スカラ関数(HEX,LOWER,SUBSTR,UPPER)
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式に,NULL,埋込み変数,及び?パラメタは指定できません。
  3. 値式のデータ型は,文字データ型(CHAR,VARCHAR),各国文字データ型(NCHAR,NVARCHAR),又は混在文字データ型(MCHAR,MVARCHAR)にしてください。
  4. 値式のデータ型が文字データ型(CHAR,VARCHAR)の場合,そのデータ型の文字集合は任意です。
  5. 結果のデータ型,及びデータ長は,値式のデータ型,及びデータ長と同じになります。
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式がナル値であれば,結果もナル値になります。
  7. 結果の文字集合は,引数に指定した値式の文字集合となります。

(26) VALUE

(a) 機能

値式の並びの中からナル値でない最初の値式の示す値を抽出します。

(b) 形式

 VALUE(値式〔,値式〕…)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • 定数
    • USER
    • CURRENT_DATE
    • CURRENT_TIME
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 四則演算
    • 日付演算
    • 時刻演算
    • 連結演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • ?パラメタ,又は埋込み変数
    • 関数呼出し
    • スカラ副問合せ
  2. 値式の数は255個以内で指定します。
  3. 値式の演算結果が次に示すデータ型の場合は指定できません。
    • BLOB
    • 最大長が32,001バイト以上のBINARY
    • BOOLEAN
    • 抽象データ型
  4. 値式に,NULLは指定できません。
  5. 最初の値式に,?パラメタ,及び埋込み変数は単独(単項演算式に指定した場合も含む)で指定できません。
  6. 値式のデータ型は,それぞれ比較できるデータ型にしてください。
    (例)
    値式の一つのデータ型がCHARの場合,ほかの値式もCHARにしてください。
    比較できるデータ型については,「1.2 データ型」を参照してください。
    ただし,次に示すデータは比較できません。
    • 日付データと日付データの文字列表現
    • 時刻データと時刻データの文字列表現
    • 時刻印データと時刻印データの文字列表現
    • 日間隔データと日間隔データの10進数表現
    • 時間隔データと時間隔データの10進数表現
    • バイナリデータと16進文字列定数
  7. VALUEの一つ以上の値式が,?パラメタ,又は埋込み変数の場合,?パラメタ,又は埋込み変数のデータ型として最初の値式のデータ型を想定します。
  8. 値式の並びは左から右に順に評価され,ナル値でない最初の値が結果になります。
  9. 結果のデータ型,及びデータ長は,集合演算(UNION ALL,又はEXCEPT ALL)の結果のデータ型,及びデータ長と同じになります。詳細については,「2.2 問合せ式」を参照してください。
  10. 結果の値は,非ナル値制約なし(ナル値を許します)になります。すべての値式がナル値であれば,結果もナル値になります。
  11. 値式が文字データ型の場合,値式の文字集合はすべて同じにしてください。ただし,二つ目以降の引数に指定した値式が次に示す値式である場合,先頭の引数で指定した値式の文字集合に変換されます。
    • 文字列定数
    • 埋込み変数(既定文字集合)
    • ?パラメタ
  12. 結果のデータ型が文字データ型となる場合,先頭の引数で指定した値式の文字集合が結果の文字集合となります。
(d) 使用例

表T5の列C2からナル値を抽出して,0を設定します。

   SELECT VALUE(C1,C2,C3,0)
       FROM T5

[図データ]

(27) VARCHAR_FORMAT

(a) 機能

日付データ,時刻データ,又は時刻印データを指定した日時書式に従って,文字列表現に変換します。

(b) 形式

 VARCHAR_FORMAT (値式,日時書式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • CURRENT_DATE
    • CURRENT_TIME
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数又はSQLパラメタ
    • 演算結果が日付データ型となる日付演算
    • 演算結果が時刻データ型となる時刻演算
    • 集合関数
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,日付データ型(DATE),時刻データ型(TIME),又は時刻印データ型(TIMESTAMP)にしてください。
  3. 日時書式については,「1.11 日時書式の指定」を参照してください。
  4. 結果のデータ型を次に示します。
    日時書式が文字データ型(CHAR又はVARCHAR)の場合:
    VARCHAR(n)
    日時書式が混在文字データ型(MCHAR又はMVARCHAR)の場合:
    MVARCHAR(n)
    定義長nは次の値となります。
    ・値式を定数以外で指定し,かつ日時書式を定数で指定した場合は,指定した書式に従って変換できる文字列の最大長となります。
    ・値式を定数で指定し,かつ日時書式を定数で指定した場合は,書式に従って変換した後の文字列長となります。
    ・日時書式を定数以外で指定した場合は,日時書式のデータ型の定義長+15となります。ただし,日時書式のデータ型が,文字集合がUTF16の文字データ型の場合,日時書式のデータ型の定義長+30となります。
  5. 結果の値は,値式のデータ型の,既定の文字列表現になります。
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。値式,又は日時書式がナル値であれば,結果もナル値になります。
  7. 結果の文字集合は,引数に指定した日時書式の文字集合となります。
(d) 使用例

表T1のC1列(データ型:DATE)から,指定した日時書式('DD/MON/YYYY')で表現した文字列で結果を取得します。

 SELECT VARCHAR_FORMAT(C1,'DD/MON/YYYY') FROM T1

[図データ]

(28) YEAR

(a) 機能

日付データ,時刻印データ,又は日間隔データから,年の部分だけを抽出します。

(b) 形式

 YEAR(値式)

(c) 規則
  1. 値式に指定できるものを次に示します。
    • CURRENT_DATE
    • CURRENT_TIMESTAMP〔(p)〕
    • 列指定
    • コンポネント指定
    • SQL変数,又はSQLパラメタ
    • 日付演算
    • 集合関数(MAX,MIN)
    • スカラ関数
    • CASE式
    • CAST指定
    • 関数呼出し
    • スカラ副問合せ
  2. 値式のデータ型は,日付データ型(DATE),時刻印データ型(TIMESTAMP),又は日間隔データ型(INTERVAL YEAR TO DAY)にしてください。
  3. 結果のデータ型は,整数(INTEGER)になります。
  4. 値式が日付データ型,又は時刻印データ型であれば,結果は1~9999になります。
  5. 値式が日間隔データ型であれば,結果は-9999~9999になります。結果が0以外の場合,値式の符号と結果の符号は同じになります。
  6. 結果の値は,非ナル値制約なし(ナル値を許します)になります。すべての値式がナル値であれば,結果もナル値になります。
(d) 使用例

表T1のC2列(データ型:INTEGER)の値が221140のC1列(データ型:日付データ型)の年度を取得します。ただし,C1列は年度末を表すため,表示の際は1年前の年を出力します。

   SELECT SUBSTR(DIGITS(YEAR(C1)-1),7,4),N'年度' FROM T1
       WHERE C2=221140

[図データ]