Hitachi

Hitachi Advanced Data Binder SQLリファレンス


8.13.5 CONVERT

データのデータ型を変換します。

また,日時書式または数値書式を指定することで,次のことができます。

スカラ関数CONVERTの実行結果の例を次に示します。

(例1)
  • DECIMAL型のデータ(-12.37)を,INTEGER型に変換します。

    CONVERT(-12.37,INTEGER) → -12

(例2)日時書式を指定した例
  • TIMESTAMP型のデータ(TIMESTAMP'2013-07-30 11:03:58')を,CHAR(10)のデータに変換します。

    CONVERT(TIMESTAMP'2013-07-30 11:03:58',CHAR(10),'YYYY/MM/DD') → '2013/07/30'

  • 日時を意味しているCHAR型のデータ('07/15/2013 12:34:56')を,TIMESTAMP型に変換します。

    CONVERT('07/15/2013 12:34:56',TIMESTAMP,'MM/DD/YYYY HH:MI:SS') → TIMESTAMP'2013-07-15 12:34:56'

(例3)数値書式を指定した例
  • INTEGER型のデータをCHAR(7)のデータに変換します。変換の際,先頭に通貨記号$を付けます。また,3桁区切りのコンマも付けます。

    CONVERT(1000,CHAR(7),'$9,999') → '△$1,000'

    CONVERT(-1000,CHAR(7),'$9,999') → '-$1,000'

    △は半角空白を意味しています。

  • 通貨記号$および3桁区切りのコンマが付いているCHAR型のデータをINTEGER型に変換します。

    CONVERT('$1,000,000',INTEGER,'$9,999,999') → 1000000

    CONVERT('-$1,000',INTEGER,'$9,999,999') → -1000

〈この項の構成〉

(1) 指定形式

スカラ関数CONVERT::=CONVERT(変換対象データ,変換後のデータ型〔,書式指定〕)
 
  変換対象データ::={値式|NULL}
  変換後のデータ型::=データ型
  書式指定::={日時書式数値書式日時書式::=定数
    数値書式::=定数

(2) 指定形式の説明

変換対象データ

データ型を変換するデータを指定します。

変換対象データは,値式の形式で指定するか,またはNULLを指定します。値式については,「7.20 値式」を参照してください。

なお,変換対象データには,配列データを指定できません。

変換後のデータ型

変換後のデータ型を指定します。指定例を次に示します。

  • INTEGER

    INTEGER型のデータに変換されます。

  • DECIMAL(5,2)

    精度が5,位取りが2のDECIMAL型のデータに変換されます。

  • CHAR(8)

    データ長8バイトのCHAR型のデータに変換されます。

  • TIMESTAMP(3)

    小数秒精度が3のTIMESTAMP型のデータに変換されます。

各データ型の指定形式については,「6.2.1 データ型の種類」を参照してください。

なお,変換後のデータ型には,次のデータ型を指定できません。

  • ータ長が32,000バイトを超えるVARCHAR

  • 配列型

書式指定

日時書式または数値書式を指定します。

日時書式

次のどちらかの場合に日時書式を指定します。

  • 日時データを文字データに変換する際,変換後の文字データの出力形式を指定します。

  • 文字データを日時データに変換する際,変換前の文字データの入力形式を指定します。

日時書式には,文字列定数を指定します。文字列定数については,「6.3 定数」を参照してください。

日時書式の指定例を次に示します。

(例)

'YYYY-MM-DD HH:MI:SS'

'YYYY/MM/DD HH MI SS FF3'

'YYYY.MM.DD-HH:MI:SS.FF6'

'YYYY:MM'

'MM/DD-HH'

上記の指定例のYYYYMM,およびDDなどを日時書式の要素といいます。日時書式に指定できる要素については,「(3) 日時書式に指定できる要素および規則」を参照してください。

日時書式を指定したときのスカラ関数CONVERTの実行結果の例を次に示します。

  • 日時データを文字データに変換する場合の例

    CONVERTの指定例

    実行結果

    CONVERT(DATE'2013-01-01',VARCHAR(20),'YYYY/MM/DD')

    '2013/01/01'

    CONVERT(DATE'2013-01-01',VARCHAR(20),'CC"世紀"')

    '21世紀'

    CONVERT(DATE'2013-01-01',VARCHAR(20),'EYYN/Q"Q"')

    'H25/1Q'

    CONVERT(DATE'2013-01-01',VARCHAR(20),'YY-WW')

    '13-01'

    CONVERT(DATE'2013-01-01',VARCHAR(20),'DD-Mon-YY')

    '01-Jan-13'

    CONVERT(DATE'2013-01-01',VARCHAR(20),'YYYY/MM/DD"("DY")"')

    '2013/01/01(TUE)'

    CONVERT(TIME'09:15:20.12',VARCHAR(20),'FMHH:MI:SS.FF6')

    '9:15:20.120000'

  • 文字データを日時データに変換する場合の例

    CONVERTの指定例

    実行結果

    CONVERT('01/02/2012 12:34:56',TIMESTAMP,'mm/dd/yyyy hh:mi:ss')

    TIMESTAMP'2012-01-02 12:34:56'

    CONVERT('平成25年1月1日午前10時23分5秒',TIMESTAMP,

    'fmeeyyn"年"mm"月"dd"日"pmnhh12"時"mi"分"ss"秒"')

    TIMESTAMP'2013-01-01 10:23:05'

    CONVERT('1 2 3 45',TIME(6),'FMHH MI SS FF2')

    TIME'01:02:03.450000'

数値書式

次のどちらかの場合に数値書式を指定します。

  • 数データを文字データに変換する際,変換後の文字データの出力形式を指定します。

  • 文字データを数データに変換する際,変換前の文字データの入力形式を指定します。

数値書式には,文字列定数を指定します。文字列定数については,「6.3 定数」を参照してください。

数値書式の指定例を次に示します。

(例)

'$9,999,999'

'00,000.00'

上記の指定例の$093桁区切りのコンマ(,),ピリオド(.)などを数値書式の要素といいます。数値書式に指定できる要素については,「(4) 数値書式に指定できる要素および規則」を参照してください。

数値書式を指定したときのスカラ関数CONVERTの実行結果の例を次に示します。

  • 数データを文字データに変換する場合の例

    CONVERTの指定例

    実行結果

    CONVERT(1234567,CHAR(10),'9,999,999')

    '△1,234,567'

    CONVERT(1234,CHAR(10),'0,000,000')

    '△0,001,234'

    CONVERT(-1000,CHAR(7),'$9,999')

    '-$1,000'

    CONVERT(1000,VARCHAR(12),'LJ9,999"dollars"')

    '1,000dollars'

    △は半角空白を意味しています。

  • 文字データを数データに変換する場合の例

    CONVERTの指定例

    実行結果

    CONVERT('1,234,567',INTEGER,'9,999,999')

    1234567

    CONVERT('12',INTEGER,'9,999,999')

    12

    CONVERT('$1,000,000',INTEGER,'$9,999,999')

    1000000

    CONVERT('1,000dollars',INTEGER,'9,999"dollars"')

    1000

    CONVERT('+1.23E+10浮動小数点文字列',DOUBLE PRECISION,'9.99EEEE"浮動小数点文字列"')

    1.2300000000000000E10

(3) 日時書式に指定できる要素および規則

(a) 日時書式の要素

日時書式に指定できる要素を次の表に示します。

表8‒51 日時書式に指定できる要素

項番

日時書式の持つ意味

日時書式に指定できる要素

説明

1

世紀

CC

世紀を意味しています。値の範囲は0099です。

なお,00は,100世紀(西暦9901〜9999年)を意味しています。

2

西暦年

YYYY

4桁の西暦年を意味しています。00019999を使用できます。

なお,文字データを日時データに変換する際にYYYYを指定するときは,時代名を指定することはできません。

3

YY

2桁の西暦年(西暦年の下2桁)を意味しています。値の範囲は0099です。

4

時代名

E

日本の時代名の省略形を意味しています。

  • 'M':明治を意味しています。

  • 'T':大正を意味しています。

  • 'S':昭和を意味しています。

  • 'H':平成を意味しています。

  • 'R':令和を意味しています。

文字データを日時データに変換する際に時代名を指定するときは,和暦年も一緒に指定する必要があります。

5

EE

日本の時代名を意味しています。

  • '明治'

  • '大正'

  • '昭和'

  • '平成'

  • '令和'

6

和暦年

YYYYN

4桁の和暦年を意味しています。各時代の対応範囲を次に示します。

  • 明治(00060045

  • 大正(00010015

  • 昭和(00010064

  • 平成(00018011

  • 令和(00017981

文字データを日時データに変換する際に和暦年を指定するときは,時代名も一緒に指定する必要があります。

7

YYN

2桁の和暦年を意味しています。0099を使用できます。

なお,日時データを文字データに変換する場合は,3桁以上の年数については,下2桁だけを変換対象にします。

8

四半期

Q

四半期を意味しています。値の範囲は14です。

  • 1:第1四半期(1月1日〜3月31日)を意味しています。

  • 2:第2四半期(4月1日〜6月30日)を意味しています。

  • 3:第3四半期(7月1日〜9月30日)を意味しています。

  • 4:第4四半期(10月1日〜12月31日)を意味しています。

9

MM

月を意味しています。0112を使用できます。

10

MON

月の英語名の省略形を意味しています。

  • 'JAN':1月

  • 'FEB':2月

  • 'MAR':3月

  • 'APR':4月

  • 'MAY':5月

  • 'JUN':6月

  • 'JUL':7月

  • 'AUG':8月

  • 'SEP':9月

  • 'OCT':10月

  • 'NOV':11月

  • 'DEC':12月

11

MONTH

月の英語名を意味しています。

  • 'JANUARY△△'

  • 'FEBRUARY'

  • 'MARCH△△△△'

  • 'APRIL△△△△'

  • 'MAY△△△△△△'

  • 'JUNE△△△△△'

  • 'JULY△△△△△'

  • 'AUGUST△△△'

  • 'SEPTEMBER'

  • 'OCTOBER△△'

  • 'NOVEMBER'

  • 'DECEMBER'

△は,半角空白を意味しています。

12

W

月内の週を意味しています。値の範囲は15です。

  • 1:各月の1〜7日を意味しています。

  • 2:各月の8〜14日を意味しています。

  • 3:各月の15〜21日を意味しています。

  • 4:各月の22〜28日を意味しています。

  • 5:各月の29日以降を意味しています。

なお,2月(うるう年を除く)は14となります。

13

WW

年内の週を意味しています。値の範囲は0153です。

例えば,01は1月1日〜1月7日を,02は1月8日〜1月14日を意味しています。

14

DD

月初からの通算日を意味しています。01〜該当する月の最終日を使用できます。

15

DDD

年初からの通算日を意味しています。001365(うるう年の場合は001366)を使用できます。

例えば,001は1月1日を,002は1月2日を意味しています。032は2月1日を意味しています。

16

曜日

D

数字で表した曜日を意味しています。17を使用できます。

  • 1:日曜日

  • 2:月曜日

  • 3:火曜日

  • 4:水曜日

  • 5:木曜日

  • 6:金曜日

  • 7:土曜日

17

DAY

英語で表した曜日を意味しています。

  • 'SUNDAY△△△'

  • 'MONDAY△△△'

  • 'TUESDAY△△'

  • 'WEDNESDAY'

  • 'THURSDAY'

  • 'FRIDAY△△△'

  • 'SATURDAY'

△は,半角空白を意味しています。

18

DY

英語で表した曜日の省略形を意味しています。

  • 'SUN':日曜日

  • 'MON':月曜日

  • 'TUE':火曜日

  • 'WED':水曜日

  • 'THU':木曜日

  • 'FRI':金曜日

  • 'SAT':土曜日

19

DAYN

日本語で表した曜日を意味しています。'日曜日''月曜日''火曜日''水曜日''木曜日''金曜日''土曜日'を使用できます。

20

DYN

日本語で表した曜日の省略形を意味しています。''''''''''''''を使用できます。

21

HH

時を意味しています。0023を使用できます。

なお,文字データを日時データに変換する際にHHまたはHH24を指定するときは,午前/午後を指定することはできません。

22

HH24

23

HH12

時を意味しています。0112を使用できます。

なお,文字データを日時データに変換する際にHH12を指定するときは,午前/午後も一緒に指定する必要があります。

24

午前/午後

AM

英語の午前または午後を意味しています。※1

文字データを日時データに変換する際に午前/午後を指定するときは,HH12も一緒に指定する必要があります。

25

A.M.

26

PM

27

P.M.

28

AMN

日本語の午前または午後を意味しています。※2

29

PMN

30

MI

分を意味しています。0059を使用できます。

31

SS

秒を意味しています。0059を使用できます。

32

SSSSS

秒を意味しています。0000086399を使用できます。

深夜0時0分0秒からの経過秒数を意味しています。例えば,午前1時0分0秒は03600になります。

33

小数秒

FF

小数秒を意味しています。

文字データを日時データに変換する場合は,変換後のデータ型の小数秒の桁数になります。

日時データを文字データに変換する場合は,変換対象データの小数秒の桁数になります。

  • 小数秒の桁数が0の場合,指定を無視します。

  • 小数秒の桁数が3の場合,FF3と同じ意味です。

  • 小数秒の桁数が6の場合,FF6と同じ意味です。

  • 小数秒の桁数が9の場合,FF9と同じ意味です。

  • 小数秒の桁数が12の場合,FF12と同じ意味です。

34

FF1

小数秒1桁(09)を意味しています。

35

FF2

小数秒2桁(0099)を意味しています。

36

FF3

小数秒3桁(000999)を意味しています。

37

FF4

小数秒4桁(00009999)を意味しています。

38

FF5

小数秒5桁(0000099999)を意味しています。

39

FF6

小数秒6桁(000000999999)を意味しています。

40

FF7

小数秒7桁(00000009999999)を意味しています。

41

FF8

小数秒8桁(0000000099999999)を意味しています。

42

FF9

小数秒9桁(000000000999999999)を意味しています。

43

FF10

小数秒10桁(00000000009999999999)を意味しています。

44

FF11

小数秒11桁(0000000000099999999999)を意味しています。

45

FF12

小数秒12桁(000000000000999999999999)を意味しています。

46

区切り文字

ハイフン(-

各要素を区切る際の文字です。

(例)

'YYYY-MM-DD HH:MI:SS'

47

スラッシュ(/

48

コンマ(,

49

ピリオド(.

50

コロン(:

51

セミコロン(;

52

空白( )

53

そのほか

"文字列"

任意の文字列を二重引用符(")で囲んで指定できます。

(例)

CONVERT(DATE'2013-01-01',VARCHAR(20),'CC"世紀"')

→'21世紀'

下線部分が該当個所です。

なお,二重引用符で囲んだ文字列中に二重引用符を指定する場合は,連続する2つの二重引用符("")を指定します。

(例)文字列としてAB"CDを指定する場合

"AB""CD"

54

FM

MONTHおよびDAYに対応する文字列の後ろの半角空白を削除するかどうか,YYYYなどの数字のゼロサプレスをするかどうかを制御します。指定方法については,「(c) 日時書式の要素FMの指定方法」を参照してください。

注※1
  • 文字データを日時データに変換する場合,AMA.M.,PM,またはP.M.のどれを指定しても変換結果はすべて同じになります。対象データ中でAMA.M.,PM,またはP.M.のどれが使用されていても,日時書式の要素にAMA.M.PM,またはP.M.のどれかを指定すれば,変換結果はすべて同じになります。また,大文字,小文字も区別されません。

  • 日時データを文字データに変換する場合,AMまたはPMのどちらを指定しても変換結果は同じになります。また,A.M.またはP.M.のどちらを指定しても変換結果は同じになります。A.M.とAMPMP.M.は,変換後の文字列中にピリオドが付くかどうかだけが異なります。

注※2

AMNまたはPMNのどちらを指定しても変換結果は同じになります。対応する文字列は,午前の場合は'午前',午後の場合は'午後'になります。

メモ

日時データを文字データに変換する場合は,日時書式のAMPMなどの指定に関係なく,変換対象の日時データの値によって変換されます。

また,文字データを日時データに変換する場合は,日時書式のAMPMなどの指定に関係なく,変換対象の文字データ中にあるAMPMなどの指定に従い変換されます。

(b) 日時書式に関する規則

  • 日時書式の長さは,64バイト以内にしてください。

  • 日時書式に指定する文字は,二重引用符(")で囲まれた文字列以外は,半角文字で指定してください。

  • 日時書式に指定する文字の大文字,小文字は区別されません。ただし,次の文字列については,大文字,小文字が区別されます。

    • AMA.M.,PM,およびP.M.の1文字目

    • MONMONTHDAY,およびDYの1〜2文字目

    • 二重引用符(")で囲まれた文字列中の文字

  • 文字データを日時データに変換する場合,次の日時書式の要素は指定できません。

    • CC(世紀)

    • Q(四半期)

    • WW(年内の週)

    • W(月内の週)

    • YY(2桁で表した西暦年)

  • TIME型のデータを文字データに変換する場合,次の日時書式の要素は指定できません。

    • CC(世紀)

    • YYYYYY(西暦年)

    • EEE(時代名)

    • YYYYNYYN(和暦年)

    • Q(四半期)

    • MMMONMONTH(月)

    • WWW(週)

    • DDDDD(日)

    • DDAYDAYNDYDYN(曜日)

  • 文字データを日時データに変換する場合,同じ意味を持つ日時書式の要素を2つ以上指定できません。例えば,次のような指定はできません。

    (例1)'YYYY-MM-DD-YYYY'

    YYYYを2つ指定できません。

    (例2)'YYYY-MM-DD-EYYN'

    YYYYYYNは,同じ意味を持つ日時書式の要素のため,指定できません。

    同じ意味を持つ日時書式の要素を次の表に示します。

    表8‒52 同じ意味を持つ日時書式の要素

    項番

    日時書式の持つ意味

    同じ意味を持つ日時書式の要素

    1

    YYYY

    2

    YYYYN

    3

    YYN

    4

    時代名

    E

    5

    EE

    6

    MM

    7

    MON

    8

    MONTH

    9

    DDD

    10

    DD

    11

    DDD

    12

    HH

    13

    HH24

    14

    HH12

    15

    SSSSS

    16

    午前/午後

    AM

    17

    A.M.

    18

    PM

    19

    P.M.

    20

    AMN

    21

    PMN

    22

    MI

    23

    SSSSS

    24

    SS

    25

    SSSSS

    26

    小数秒

    FF

    27

    FF1

    28

    FF2

    29

    FF3

    30

    FF4

    31

    FF5

    32

    FF6

    33

    FF7

    34

    FF8

    35

    FF9

    36

    FF10

    37

    FF11

    38

    FF12

  • 文字データを日時データに変換する際に曜日(DDAYDYDAYN,またはDYN)を指定した場合,曜日と日付の指定に矛盾があってもエラーにはなりません。

  • 日時データを文字データに変換する際に,日時書式にAMA.M.,PM,またはP.M.を指定した場合,1文字目を大文字で指定したときにはすべて大文字で,1文字目を小文字で指定したときにはすべて小文字で出力されます。

  • 日時書式の要素に時代名を使用する場合,対応する西暦年の範囲は,西暦1873年1月1日(明治6年1月1日)〜西暦9999年12月31日(令和7981年12月31日)となります。対応する和暦年の範囲は次のとおりです。

    • 明治:06年01月01日〜45年07月29日

    • 大正:01年07月30日〜15年12月24日

    • 昭和:01年12月25日〜64年01月07日

    • 平成:01年01月08日〜31年04月30日

    • 令和:01年05月01日~7981年12月31日

    ただし,時代名に平成を指定して文字データを日時データに変換する場合は,平成8011年12月31日まで指定できます。

    (例)

    CONVERT('05/01/0031/平成',DATE,'MM/DD/YYYYN/EE') → 2019-05-01

    CONVERT('12/31/8011/H',DATE,'MM/DD/YYYYN/E') → 9999-12-31

  • HH24で表す0時は,午前/午後とHH12を使用して表すと午前12時になります。また,HH24で表す12時を,午前/午後とHH12を使用して表すと午後12時になります。

  • 日時書式に指定する文字列は,先頭(左)から順に要素を切り出します。切り出す際,長い要素名として切り出すことも,短い要素名として切り出すこともできる場合は,長い要素名として切り出します。例えば,'DDD'を指定した場合,1つ目の要素をDDDではなく,DDDとして切り出します。

  • 文字データを日時データに変換する際に二重引用符で囲まれた文字列を指定する場合,二重引用符で囲まれた文字列中の英字と,変換対象データ中の英字の大文字,小文字を一致させてください。また,日時データを文字データに変換する場合,二重引用符で囲まれた文字列中の大文字と小文字は区別されて出力されます。

  • 文字データを日時データに変換する際にEを指定する場合,変換対象データ中の大文字,小文字はどちらであっても同じように変換されます。日時データを文字データに変換する場合は,大文字で出力されます。

(c) 日時書式の要素FMの指定方法

■日時データを文字データに変換する場合

FMの指定がない場合,日時書式の要素にMONTHまたはDAYが指定されているときは,変換後の文字列は9文字固定になります。9文字に足りない分は,半角空白を埋め込みます。

また,年,月,日などの数字のゼロサプレスはしません。

(例)FMの指定がない場合

CONVERT(DATE'2014-01-05',CHAR(17),'YYYY-MONTH-DD')
→'2014-JANUARY△△-05'

JANUARYの後ろの半角空白を削除しません。2つの半角空白を埋め込んで9文字にします。また,日を表す05のゼロサプレスをしません。

(例)FMの指定がある場合

CONVERT(DATE'2014-01-05',CHAR(14),'FMYYYY-MONTH-DD')
→'2014-JANUARY-5'

JANUARYの後ろの半角空白を削除します。また,日を表す05のゼロサプレスをします。

このように,変換後の文字データの半角空白の削除,および数字のゼロサプレスをしたい場合は,日時書式の要素にFMを指定します。

なお,FMを途中で指定することによって,指定したところから処理を切り替えることができます。

(例)

[図データ]

[説明]
  1. MONTHに対応する文字列(この例ではJANUARY△△)の半角空白を削除しません。また,YYYY(この例では0123),DD(この例では01)に対応する数字のゼロサプレスを行いません。

  2. MONTHに対応する文字列の後ろの半角空白を削除して,JANUARYと変換します。また,YYYYDDに対応する数字のゼロサプレスを行い,YYYY123と,DD1と変換します。

  3. MONTHに対応する文字列(この例ではJANUARY△△)の半角空白を削除しません。また,YYYY(この例では0123),DD(この例では01)に対応する数字のゼロサプレスを行いません。

■文字データを日時データに変換する場合
  • 日時書式の要素にMONTHまたはDAYを指定する場合,変換対象の文字データ中に半角空白(1月の場合はJANUARY△△)が必要になります。変換対象の文字データ中に半角空白がない場合は(1月の場合はJANUARY),日時書式の要素にFMを指定すると,半角空白がなくても変換できます。

    <エラーになる例>

    CONVERT('2014-JANUARY-05',DATE,'YYYY-MONTH-DD') → エラー

    JANUARYの後ろに半角空白が2つないため,エラーになります。

    <エラーにならない例>

    CONVERT('2014-JANUARY-05',DATE,'FMYYYY-MONTH-DD') → DATE'2014-01-05'

    FMを指定しているため,JANUARYの後ろの半角空白2つは必要ありません。

    なお,FMを指定した場合に,JANUARY△△のように半角空白があるときは,エラーになります。

    重要

    FMを指定した場合,次のようなケースでは,意図したとおりの変換結果が返らないことがあります。例えば,文字列'2014111'DATE型(2014年1月11日)に変換する場合,次のように指定すると,意図したとおりの変換結果が返りません。

    CONVERT('2014111',DATE,'FMYYYYMMDD') → DATE'2014-11-01'

    上記の例の場合,2014年11月1日に変換されます。

  • 日時書式に数字で指定する要素(「表8‒53 数字で指定する日時書式の要素の前ゼロを含めた最大文字数」に示す要素)を指定する場合,変換対象の文字データ中の数字が「表8‒53 数字で指定する日時書式の要素の前ゼロを含めた最大文字数」に示す最大文字数になっている必要があります。例えば,要素MMを指定した場合,文字データ中の1月〜9月を表す数字は,0109となっている必要があります(前ゼロが必要になります)。変換対象の文字データ中に前ゼロがない場合は,日時書式の要素にFMを指定すると,前ゼロがなくても変換できます(前ゼロがあってもなくてもどちらでもエラーにはなりません)。

    <エラーになる例>

    CONVERT('2014:1:5',DATE,'YYYY:MM:DD') → エラー

    <エラーにならない例>

    CONVERT('2014:1:5',DATE,'FMYYYY:MM:DD') → DATE'2014-01-05'

    CONVERT('2014:01:05',DATE,'FMYYYY:MM:DD') → DATE'2014-01-05'

  • 数字で指定する要素(「表8‒53 数字で指定する日時書式の要素の前ゼロを含めた最大文字数」に示す要素)の値が0であっても,変換対象データの各要素に1文字以上の指定が必要です。例えば,日時書式に'FMHH:MI:SS'を指定して,0時0分0秒のデータを変換する場合,変換対象データが'0:0:0'のときは変換できますが,変換対象データが'0:0:'のときはエラーになります。

    ただし,FMの適用対象外であるFFおよびFF1FF12の場合は,0の指定を省略できます。例えば,日時書式に'FMHH:MI:SS.FF3'を指定して,0時0分0.000秒のデータを変換する場合,変換対象データが'0:0:0.'であっても変換できます。

  • FMを途中で指定することによって,指定したところから処理を切り替えることができます。

  • FMが指定されている場合,HADBはMMDDなどの要素に対応する数字の範囲を,数字以外の文字が出現するか,または指定した日時書式の最大文字数に達するかのどちらかで認識しています。数字で指定する日時書式の要素の前ゼロを含めた最大文字数を次の表に示します。

    表8‒53 数字で指定する日時書式の要素の前ゼロを含めた最大文字数

    項番

    数字で指定する日時書式の要素

    前ゼロを含めた最大文字数

    1

    YYYY

    4

    2

    YYYYN

    4

    3

    YYN

    2

    4

    MM

    2

    5

    DD

    2

    6

    DDD

    3

    7

    D

    1

    8

    HH

    2

    9

    HH24

    2

    10

    HH12

    2

    11

    MI

    2

    12

    SS

    2

    13

    SSSSS

    5

    14

    FF

    対象外

    15

    FF1

    16

    FF2

    17

    FF3

    18

    FF4

    19

    FF5

    20

    FF6

    21

    FF7

    22

    FF8

    23

    FF9

    24

    FF10

    25

    FF11

    26

    FF12

(4) 数値書式に指定できる要素および規則

(a) 数値書式の要素の指定形式

数値書式の要素の指定形式を次に示します。省略した要素は詰めて記述してください。記述順序を間違えたり,指定できない要素を指定したりした場合はエラーになります。

数値書式::={固定小数点表記浮動小数点表記最短表記16進数表記固定小数点表記::=
       〔"文字列"〕〔〔修飾要素〕〔符号要素〕〔B〕〔通貨要素〕
       〔数要素〔〔{区切り文字要素数要素}〕…数要素〕〕〔.〕
       〔数要素〕…〔符号要素〕〔"文字列"〕〕
 
  浮動小数点表記::=
       〔"文字列"〕〔修飾要素〕〔数要素〕…〔.〕〔数要素〕…
        浮動小数点要素〔"文字列"〕
 
  最短表記::=〔"文字列"〕{TM|TM9|TME}〔"文字列"〕
 
  16進数表記::=
       〔"文字列"〕〔修飾要素〕〔0〕…16進数要素16進数要素〕…〔"文字列"〕
 
    修飾要素::={LJ|LS}
    符号要素::={MI|S|PR}
    通貨要素::={$|\}
    数要素::={0|9}
    区切り文字要素::={,|△}
    浮動小数点要素::={EEEE|eeee}
    16進数要素::={X|x}
  • 区切り文字要素の△は半角空白を意味しています。

  • "文字列"は二重引用符で囲んだ任意の文字列を意味しています。

(b) 数値書式の要素

数値書式に指定できる要素を次の表に示します。

なお,表中の△は半角空白を意味しています。

表8‒54 数値書式に指定できる要素

項番

要素の種類

数値書式に指定できる要素

説明

1

区切り文字要素

,(コンマ)

■数データを文字データに変換する場合

  • 変換後の文字データに,数要素を区切るためのコンマを挿入する場合に指定します。コンマを指定した位置にコンマが挿入されます。

    (例)

    CONVERT(1234567,CHAR(10),'9,999,999')

    →'△1,234,567'

  • 「数データの整数部の桁数<数値書式に指定した整数部の桁数」の場合,桁数が多い部分にコンマは挿入されません。

    (例)

    CONVERT(1234,CHAR(10),'9,999,999')

    →'△△△△△1,234'

■文字データを数データに変換する場合

  • 変換対象の文字データ中にコンマがある場合に指定します。コンマを指定した位置からコンマを削除して,数データに変換します。

    (例)

    CONVERT('1,234,567',INTEGER,'9,999,999')

    →1234567

  • 変換対象の文字データ中に,数値書式で指定した位置にコンマがない場合はエラーになります。

    (例)

    CONVERT('1234',INTEGER,'9,999')

    →エラー

  • 「文字データの整数部の桁数<数値書式に指定した整数部の桁数」の場合,桁数が多い部分に指定されたコンマは無視されます。

    (例)

    CONVERT('1,234',INTEGER,'9,999,999')

    →1234

指定規則

小数点を意味するピリオドの右側にコンマは指定できません。

(例)エラーになる数値書式の指定例

'999,999.9,99'

',999,999,999'

2

半角空白

■数データを文字データに変換する場合

  • 変換後の文字データに,数要素を区切るための半角空白を挿入する場合に指定します。半角空白を指定した位置に半角空白が挿入されます。

    (例)

    CONVERT(1234567,CHAR(10),'9 999 999')

    →'△1△234△567'

■文字データを数データに変換する場合

  • 変換対象の文字データ中に半角空白がある場合に指定します。半角空白を指定した位置から半角空白を削除して,数データに変換します。

    (例)

    CONVERT('1 234 567',INTEGER,'9 999 999')

    →1234567

  • 変換対象の文字データ中に,数値書式で指定した位置に半角空白がない場合はエラーになります。

    (例)

    CONVERT('1234',INTEGER,'9 999')

    →エラー

  • 「文字データの整数部の桁数<数値書式に指定した整数部の桁数」の場合,桁数が多い部分に指定された半角空白は無視されます。

    (例)

    CONVERT('1 234',INTEGER,'9 999 999')

    →1234

指定規則

小数点を意味するピリオドの右側に半角空白は指定できません。

(例)エラーになる数値書式の指定例

'9.99 9'

3

小数点文字

.(ピリオド)

小数点の位置をピリオドで指定します。数値書式に指定したピリオドの前の数要素が整数部を表し,ピリオドの後ろの数要素が小数点以下を表します。

■数データを文字データに変換する場合

  • 数データを数値書式に指定した整数部と小数点以下に変換します。

    (例)

    CONVERT(1234.56,CHAR(9),'9,999.99')

    →'△1,234.56'

  • 「数データの小数点以下の桁数>数値書式に指定した小数点以下の桁数」の場合,数値を丸めて変換します。数値の丸め方は,スカラ関数ROUNDの丸め方と同じになります。スカラ関数ROUNDについては,「8.4.9 ROUND」を参照してください。

    (例)

    CONVERT(1.56,CHAR(4),'9.9')

    →'△1.6'

■文字データを数データに変換する場合

  • 文字データのピリオドの左側を整数,ピリオドの右側を小数点以下として,数データに変換します。

    (例)

    CONVERT('1,234.56',DECIMAL(6,2),'9,999.99')

    →1234.56

指定規則

ピリオドは,数要素の直前,直後,または数要素の間に1個だけ指定できます。

(例)エラーになる数値書式の指定例

'.$999'

4

通貨要素

$

■数データを文字データに変換する場合

  • 変換後の文字データに,ドル記号($)を付加する場合に指定します。

    (例)

    CONVERT(1000,CHAR(7),'$9,999')

    →'△$1,000'

    CONVERT(-1000,CHAR(7),'$9,999')

    →'-$1,000'

■文字データを数データに変換する場合

  • 変換対象の文字データ中にドル記号($)がある場合に指定します。ドル記号を削除して,数データに変換します。

    (例)

    CONVERT('$1,000',INTEGER,'$9,999')

    →1000

  • 数字の前にドル記号がない場合はエラーになります。

    (例)

    CONVERT('1,000',INTEGER,'$9,999')

    →エラー

  • ドル記号と最上位の数字の間に半角空白がないようにしてください。

    (例)

    CONVERT('$ 1,000',INTEGER,'$9,999')

    →エラー

5

\

■数データを文字データに変換する場合

  • 変換後の文字データに,円記号(\)を付加する場合に指定します。

    (例)

    CONVERT(1000,CHAR(7),'\9,999')

    →'△\1,000'

    CONVERT(-1000,CHAR(7),'\9,999')

    →'-\1,000'

■文字データを数データに変換する場合

  • 変換対象の文字データ中に円記号(\)がある場合に指定します。円記号を削除して,数データに変換します。

    (例)

    CONVERT('\1,000',INTEGER,'\9,999')

    →1000

  • 数字の前に円記号がない場合はエラーになります。

    (例)

    CONVERT('1,000',INTEGER,'\9,999')

    →エラー

  • 円記号と最上位の数字の間に半角空白がないようにしてください。

    (例)

    CONVERT('\ 1,000',INTEGER,'\9,999')

    →エラー

6

数要素

0

数値の1つの桁を意味し,変換対象データの数値に対応する桁を変換します。ここでは,固定小数点表記で指定する数要素0について説明しています。浮動小数点表記,および16進数表記で指定する数要素0については,浮動小数点要素および16進数要素で説明します。

■数データを文字データに変換する場合

  • 数要素0および9の個数の合計は,変換後の数字の最大桁数を示しています。

    (例)

    CONVERT(1234.5,CHAR(10),'00,000.00')

    →'△01,234.50'

  • 「数データの小数点以下の桁数>数値書式に指定した小数点以下の桁数」の場合,数値を丸めて変換します。数値の丸め方は,スカラ関数ROUNDの丸め方と同じになります。スカラ関数ROUNDについては,「8.4.9 ROUND」を参照してください。

    (例)

    CONVERT(2.34567,CHAR(5),'0.00')

    →'△2.35'

  • 数値書式に指定した数要素,区切り文字,ピリオドの指定に従って変換された文字データの先頭に符号を付加します。0または正の値の場合は半角空白を付加します。負の値の場合はマイナス記号(-)を付加します。ただし,符号要素を指定した場合は,符号要素の指定に従って符号を示す文字列を付加します。

    (例)

    CONVERT(-1234.5,CHAR(8),'0,000.0')

    →'-1,234.5'

    CONVERT(0,CHAR(8),'0,000.0')

    →'△0,000.0'

  • 「数データの整数部または小数点以下の桁数<数値書式に指定した整数部または小数点以下の桁数」の場合,対応しない桁は文字列の0に変換されます。

    (例)

    CONVERT(1.1,CHAR(10),'0,000.000')

    →'△0,001.100'

  • 「数データの整数部の桁数>数値書式に指定した整数部の桁数」の場合,文字列#に変換されます。

    (例)

    CONVERT(1234,CHAR(3),'00')

    →'###'

■文字データを数データに変換する場合

  • 数要素0または9のどちらを指定しても同じように変換されます。文字データの整数部の有効桁数を超えた桁に半角空白がある場合でも,数要素0を指定して変換できます。また,文字データの整数部の有効桁数を超えた桁に文字列0がある場合でも,数要素9を指定して変換できます。

    (例)

    CONVERT('0,123',INTEGER,'9,999')

    →123

  • 文字データと数値書式の桁の対応付けは,小数点を基点として,整数桁は左側に向かって1の位,10の位,…の順に,小数点以下の桁は右側に向かって小数点第1位,小数点第2位,…の順に行います。また,文字データの桁数と数値書式の桁数が合っていなくても,「文字データの整数部の桁数<数値書式に指定した整数部の桁数」,「文字データの小数点以下の桁数<数値書式に指定した小数点以下の桁数」の場合は変換できます。

    (例)

    CONVERT('1,234.56',DECIMAL(8,3),'00,000.000')

    →1234.560

次の場合はエラーになります。

  • 「文字データの整数部の桁数>数値書式に指定した整数部の桁数」の場合

    (例)

    CONVERT('1234',INTEGER,'00')

    →エラー

  • 「文字データの小数点以下の桁数>数値書式に指定した小数点以下の桁数」の場合

    (例)

    CONVERT('1.234',DECIMAL(2,1),'0.0')

    →エラー

  • 文字データ中の符号と最上位の数字の間に半角空白がある場合

    (例)

    CONVERT('- 1,234',INTEGER,'0,000')

    →エラー

指定規則

数要素0および9は,合計で最大38個指定できます。

7

9

数値の1つの桁を意味し,変換対象データの数値に対応する桁を変換します。ここでは,固定小数点表記で指定する数要素9について説明しています。浮動小数点表記,および16進数表記で指定する数要素9については,浮動小数点要素および16進数要素で説明します。

■数データを文字データに変換する場合

  • 要素0および9の個数の合計は,変換後の数字の最大桁数を示しています。

    (例)

    CONVERT(1234.5,CHAR(10),'99,999.99')

    →'△△1,234.50'

  • 「数データの小数点以下の桁数>数値書式に指定した小数点以下の桁数」の場合,数値を丸めて変換します。数値の丸め方は,スカラ関数ROUNDの丸め方と同じになります。スカラ関数ROUNDについては,「8.4.9 ROUND」を参照してください。

    (例)

    CONVERT(2.34567,CHAR(5),'9.99')

    →'△2.35'

  • 数値書式に指定した数要素,区切り文字,ピリオドの指定に従って変換された文字データの先頭に符号を付加します。0または正の値の場合は半角空白を付加します。負の値の場合はマイナス記号(-)を付加します。ただし,符号要素を指定した場合は,符号要素の指定に従って符号を示す文字列を付加します。

    (例)

    CONVERT(1234.5,CHAR(8),'9,999.9')

    →'△1,234.5'

    CONVERT(-1234.5,CHAR(8),'9,999.9')

    →'-1,234.5'

  • 「数データの整数部の桁数<数値書式に指定した整数部の桁数」の場合,対応しない桁は半角空白に変換されます。また,「数データの小数点以下の桁数<数値書式に指定した小数点以下の桁数」の場合,対応しない桁は文字列の0に変換されます。

    (例)

    CONVERT(1.1,CHAR(10),'9,999.999')

    →'△△△△△1.100'

  • 小数点以下に数要素の指定がない場合,数データを数値書式の桁数で丸めた結果が0のときは,文字列の0に変換されます。

    (例)

    CONVERT(0.1,CHAR(2),'9')

    →'△0'

    小数点以下に数要素の指定がある場合,変換後の文字データの整数部は,0ではなく半角空白に変換されます。

    (例)

    CONVERT(0.1,CHAR(5),'9.99')

    →'△△.10'

    CONVERT(0,CHAR(5),'9.99')

    →'△△.00'

    また,負の値の場合は,次のように変換されます。

    (例)

    CONVERT(-0.1,CHAR(5),'9.99')

    →'△-.10'

  • 数要素9の前に数要素0を指定した場合,指定した数要素0以降の数要素9は,数要素0として扱われます。

    (例)

    CONVERT(1,CHAR(5),'0999')

    →'△0001'

  • 「数データの整数部の桁数>数値書式に指定した整数部の桁数」の場合,文字列#に変換されます。

    (例)

    CONVERT(1234,CHAR(3),'99')

    →'###'

■文字データを数データに変換する場合

  • 数要素0または9のどちらを指定しても同じように変換されます。文字データの整数部の有効桁数を超えた桁に半角空白がある場合でも,数要素0を指定して変換できます。また,文字データの整数部の有効桁数を超えた桁に文字列0がある場合でも,数要素9を指定して変換できます。

    (例)

    CONVERT('0,123',INTEGER,'9,999')

    →123

  • 文字データと数値書式の桁の対応付けは,小数点を基点として,整数桁は左側に向かって1の位,10の位,…の順に,小数点以下の桁は右側に向かって小数点第1位,小数点第2位,…の順に行います。また,文字データの桁数と数値書式の桁数が合っていなくても,「文字データの整数部の桁数<数値書式に指定した整数部の桁数」,「文字データの小数点以下の桁数<数値書式に指定した小数点以下の桁数」の場合は変換できます。

    (例)

    CONVERT('1,234.56',DECIMAL(8,3),'99,999.999')

    →1234.560

次の場合はエラーになります。

  • 「文字データの整数部の桁数>数値書式に指定した整数部の桁数」の場合

    (例)

    CONVERT('1234',INTEGER,'99')

    →エラー

  • 「文字データの小数点以下の桁数>数値書式に指定した小数点以下の桁数」の場合

    (例)

    CONVERT('1.234',DECIMAL(4,3),'9.9')

    →エラー

  • 文字データ中の符号と最上位の数字の間に半角空白がある場合

    (例)

    CONVERT('- 1,234',INTEGER,'9,999')

    →エラー

指定規則

数要素0および9は,合計で最大38個指定できます。

8

浮動小数点要素

EEEE

eeee

浮動小数点数定数を示すときに指定します。数要素0または9のどちらを指定しても,同じように変換されます。数値書式の指定例を次に示します。

(例)

  • '9.999EEEE'

  • '9.999eeee'

  • '9.EEEE'

  • '9EEEE'

  • '.9EEEE'

  • '99.9EEEE'

注※ 文字データを数データに変換する場合に限り指定できます。

■数データを文字データに変換する場合

  • 数値書式の指定に従って,浮動小数点数定数の形式に変換されます。

    (例)

    CONVERT(12.3,CHAR(9),'9.99EEEE')

    →'△1.23E+01'

    CONVERT(0.01,CHAR(9),'9.99EEEE')

    →'△1.00E-02'

    変換後の文字データの指数が0または正の値の場合は,指数にプラス符号(+)が付加されます。

    変換後の文字データの指数は,2〜3桁になります。値が0の場合,指数は00になります。

  • 「数データの小数点以下の桁数>数値書式に指定した小数点以下の桁数」の場合,数値を丸めて変換します。数値の丸め方は,スカラ関数ROUNDの丸め方と同じになります。スカラ関数ROUNDについては,「8.4.9 ROUND」を参照してください。

    (例)

    CONVERT(34.56,CHAR(9),'9.99EEEE')

    →'△3.46E+01'

  • 数値書式に指定した数要素,ピリオド,要素EEEEの指定に従って変換された文字データの先頭に符号を付加します。0または正の値の場合は半角空白を付加します。負の値の場合はマイナス記号(-)を付加します。

    (例)

    CONVERT(0,CHAR(9),'9.99EEEE')

    →'△0.00E+00'

    CONVERT(-1,CHAR(9),'9.99EEEE')

    →'-1.00E+00'

  • 要素を小文字eeeeで指定した場合,浮動小数点数定数の表記のEは,小文字のeに変換されます。

    (例)

    CONVERT(1,CHAR(9),'9.99eeee')

    →'△1.00e+00'

  • 整数部に数要素を1個指定してください。0個または2個以上指定した場合はエラーになります。

    (例)

    CONVERT(1,CHAR(9),'99.9EEEE')

    →エラー

■文字データを数データに変換する場合

  • 浮動小数点数定数の表記で表現されている文字データを浮動小数点数データに変換します。

    (例)

    CONVERT('1.23E+10浮動小数点文字列',DOUBLE PRECISION,'9.99EEEE"浮動小数点文字列"')

    →1.2300000000000000E10

    CONVERT('-1.23E+10浮動小数点文字列',DOUBLE PRECISION,'9.99EEEE"浮動小数点文字列"')

    →-1.2300000000000000E10

  • 要素EEEEと変換対象データ中のEの文字は,大文字,小文字の区別をしません。

    (例)

    CONVERT('1.23e+10',DOUBLE PRECISION,'9.99EEEE')

    →1.2300000000000000E10

次の場合はエラーになります。

  • 「文字データの整数部の桁数>数値書式に指定した整数部の桁数」の場合

    (例)

    CONVERT('12.3E+1',DOUBLE PRECISION,'9.9EEEE')

    →エラー

  • 「文字データの小数点以下の桁数>数値書式に指定した小数点以下の桁数」の場合

    (例)

    CONVERT('1.234E+1',DOUBLE PRECISION,'9.9EEEE')

    →エラー

  • 文字データ中の仮数の符号と最上位の数字の間に半角空白がある場合

    (例)

    CONVERT('- 1.23E+1',DOUBLE PRECISION,'9.99EEEE')

    →エラー

指定規則
  • 整数部に指定した数要素と,小数点以下に指定した数要素の合計が,最大17個指定できます。

  • EEEEまたはeeeeと指定してください。大文字と小文字を混在して指定することはできません。

9

符号要素

MI

■数データを文字データに変換する場合

  • 数値書式に指定した数要素,区切り文字,ピリオドの指定に従って変換された文字データの後ろに,負の値の場合はマイナス符号(-)を付加し,0または正の値の場合は半角空白を付加します。

    (例)

    CONVERT(-123,CHAR(4),'999MI')

    →'123-'

    CONVERT(123,CHAR(4),'999MI')

    →'123△'

■文字データを数データに変換する場合

  • 要素MIの指定位置を符号と見なし,数データに変換します。マイナス符号(-)の場合は負の値に変換し,プラス符号(+)または半角空白の場合は,0以上の値に変換します。

    (例)

    CONVERT('123-',INTEGER,'999MI')

    →-123

    また,変換対象データから"文字列"で指定した部分を除いたデータの終端が数字またはピリオドの場合は,0または正の値に変換します。

    (例)

    CONVERT('123$',INTEGER,'999MI"$"')

    →123

10

S(先頭にSを指定した場合)

■数データを文字データに変換する場合

  • 数値書式に指定した数要素,区切り文字,ピリオドの指定に従って変換された文字データの前に符号を付加します。負の値の場合はマイナス符号(-)を,0または正の値の場合はプラス符号(+)を付加します。

    (例)

    CONVERT(123,CHAR(4),'S999')

    →'+123'

  • 数値書式に通貨要素を指定した場合は,通貨記号の前に符号を付加します。

    (例)

    CONVERT(123,CHAR(5),'S$999')

    →'+$123'

■文字データを数データに変換する場合

  • 文字データの数字の前にある符号に従って数データに変換します。符号がない場合はエラーになります。

    (例)

    CONVERT('+$123',INTEGER,'S$999')

    →123

    CONVERT('123',INTEGER,'S999')

    →エラー

  • 文字データ中の符号と最上位の数字の間に半角空白があるとエラーになります。

    (例)

    CONVERT('+ 123',INTEGER,'S999')

    →エラー

  • 数値書式に通貨要素を指定した場合,文字データ中の通貨記号の前に符号がないとエラーになります。

    (例)

    CONVERT('+$123',INTEGER,'S$999')

    →123

    CONVERT('$123',INTEGER,'S$999')

    →エラー

11

S(末尾にSを指定した場合)

■数データを文字データに変換する場合

  • 数値書式に指定した数要素,区切り文字,ピリオドの指定に従って変換された文字データの末尾に符号を付加します。負の値の場合はマイナス符号(-)を,0または正の値の場合はプラス符号(+)を付加します。

    (例)

    CONVERT(123,CHAR(4),'999S')

    →'123+'

■文字データを数データに変換する場合

  • 数値書式に指定した要素Sの位置の符号に従って,数データに変換します。符号がない場合は,エラーになります。

    (例)

    CONVERT('123+',INTEGER,'999S')

    →123

    CONVERT('123',INTEGER,'999S')

    →エラー

12

PR

■数データを文字データに変換する場合

  • 数データが負の値の場合,数値書式に従って変換された文字データを< >の中に設定します。

    (例)

    CONVERT(-123,CHAR(5),'999PR')

    →'<123>'

  • 数データが0または正の値の場合は,< >の替わりに半角空白が挿入されます。

    (例)

    CONVERT(123,CHAR(5),'999PR')

    →'△123△'

  • 数値書式に通貨要素または"文字列"を指定した場合,数データが負の値のときは< >の中に通貨要素または"文字列"に対応する文字が設定されます。

    (例)

    CONVERT(-123,CHAR(6),'$999PR')

    →'<$123>'

    CONVERT(-123,CHAR(12),'999PR"dollars"')

    →'<123dollars>'

■文字データを数データに変換する場合

  • 文字データ中の数字が< >で囲まれている場合は,< >を削除して負の値に変換します。< >で囲まれていない場合は,0または正の値に変換します。

    (例)

    CONVERT('<123>',INTEGER,'999PR')

    →-123

    CONVERT('123',INTEGER,'999PR')

    →123

13

文字列

"文字列"(二重引用符で囲まれた文字列)

数値書式の先頭または末尾に,二重引用符(")で囲んだ文字列を指定できます。全角文字も指定できます。

■数データを文字データに変換する場合

  • 二重引用符で囲んだ文字列を,変換後の文字データの先頭または末尾に挿入します。

    (例)

    CONVERT(123,CHAR(11),'999"dollars"')

    →'△123dollars'

  • 二重引用符で囲まれた文字列中の英字は,大文字,小文字を区別します。

■文字データを数データに変換する場合

  • 文字データから二重引用符で囲まれた文字列を削除して,数データに変換します。

    (例)

    CONVERT('123dollars',INTEGER,'999"dollars"')

    →123

  • 二重引用符で囲まれた文字列が文字データ中にない場合はエラーになります。

    (例)

    CONVERT('123',INTEGER,'999"dollars"')

    →エラー

    ただし,数値書式の先頭に指定した二重引用符で囲まれた文字列の先頭が半角空白(1個または連続している半角空白),または末尾に指定した二重引用符で囲まれた文字列の末尾が半角空白(1個または連続している半角空白)の場合は,半角空白が文字データになくてもエラーになりません。

    (例)

    CONVERT('dollars123',INTEGER,'" dollars"999')

    →123

  • 二重引用符で囲まれた文字列中の英字と,変換対象データ中の英字の大文字,小文字を一致させてください。

指定規則
  • 数値書式の先頭と末尾の両方に二重引用符で囲んだ文字列を指定することができます。

  • ほかの要素の間に二重引用符で囲んだ文字列を指定することはできません。

  • 二重引用符で囲んだ文字列中に二重引用符を指定する場合は,二重引用符を2つ連続して指定してください。

14

16進数要素

X

x

■数データを文字データに変換する場合

  • 数データを指定された桁数の16進数字に変換します。

    (例)

    CONVERT(10,CHAR(5),'XXXX')

    →'△△△△A'

    CONVERT(10,CHAR(5),'0XXX')

    →'△000A'

  • 変換後の文字データの16進数字の前に,半角空白が1個挿入されます。

    (例)

    CONVERT(10,CHAR(2),'X')

    →'△A'

  • 要素0X,およびxは,16進数字に変換した1文字に対応します。

  • 変換できる整数値の最大は,DECIMAL型(固定小数点)で表せる正の値の最大値になります。

  • 文字データに変換した16進数字が,指定した桁数(要素Xおよびxの合計数)に満たない場合,変換した文字データを右詰に格納し,不足分に対して半角空白を挿入します。

    (例)

    CONVERT(10,CHAR(5),'XXXX')

    →'△△△△A'

    半角空白ではなく文字列の0を挿入したい場合は,先頭に要素0を指定してください。要素0は複数個連続して指定できますが,要素Xまたはxの前に指定してください。

    (例)

    CONVERT(10,CHAR(5),'0XXX')

    →'△000A'

  • 指定された数値が整数でない場合は,整数に丸められます。丸め方法はスカラ関数ROUNDと同じです。

    (例)

    CONVERT(10.5,CHAR(6),'0XXXX')

    →'△0000B'

  • 数データが負の値の場合,文字列#に変換されます。

    (例)

    CONVERT(-20,CHAR(6),'0XXXX')

    →'######'

  • 最初に指定した要素Xが大文字の場合は,変換後の16進数字は大文字(AF)になります。小文字(x)の場合は,変換後の16進数字は小文字(af)になります。

    (例)

    CONVERT(10,CHAR(5),'xXXX')

    →'△△△△a'

  • 「変換対象データを16進数字に変換した文字数>数値書式に指定した桁数(要素0Xxの合計数)」の場合,#に変換します。

    (例)

    CONVERT(1024,CHAR(5),'XX')

    →'###△△'

■文字データを数データに変換する場合

  • 文字データの16進数字(09AFaf)を数データに変換します。

    (例)

    CONVERT('AB',INTEGER,'XXXX')

    →171

  • 要素0X,およびxは,16進数字を16進数に変換する際の要素として同等に扱われます。ただし,要素0を指定する場合は,要素Xまたはxの前に指定してください。

  • 要素Xまたはxのどちらを指定しても変換結果は同じになります。また,文字データ中の16進数字に大文字と小文字が混在していても変換できます。

    (例)

    CONVERT('Ab',INTEGER,'xXXx')

    →171

  • 文字データの16進数字の前に半角空白がある場合でも,要素0を指定できます。

    (例)

    CONVERT('16進文字列 A',INTEGER,'"16進文字列"0XXX')

    →10

  • 数値書式に要素0を指定していなくても,有効桁数より上位の桁に0があっても変換できます。ただし,変換できるのは「上位の桁の0を含めた16進数字の桁数≦数値書式に指定した桁数(要素Xおよびxの合計数)」のときだけです。

    (例)

    CONVERT('00A',INTEGER,'XXXXX')

    →10

  • 「文字データの桁数<数値書式に指定した桁数(要素0Xxの合計数)」の場合でも変換できます。

    (例)

    CONVERT('A',INTEGER,'XXX')

    →10

  • 文字データの16進数字は,0または正の整数値として扱われます。

次の場合はエラーになります。

  • 文字データ中に16進数字(09AFaf)以外の文字がある場合

  • 「文字データの桁数>数値書式に指定した桁数(要素0Xxの合計数)」の場合

    (例)

    CONVERT('0001',INTEGER,'XX')

    →エラー

指定規則

要素0X,およびxの合計数が,最大32個指定できます。

15

修飾要素

LS

■数データを文字データに変換する場合

  • 変換後の文字データの先頭から連続している半角空白を削除します。削除した半角空白は,文字列の後方に挿入します。

    (例)

    CONVERT(1,CHAR(4),'LS000')

    →'001△'

    CONVERT(1,CHAR(4),'LS999')

    →'1△△△'

  • 二重引用符で囲まれた文字列中の半角空白は編集対象になりません。

■文字データを数データに変換する場合

  • 要素LSを指定しても無視されます。後続の数値書式に従って数データに変換されます。

指定規則

LSは数値書式に1回だけ指定できます。

16

LJ

■数データを文字データに変換する場合

  • 変換後の文字データの前後に半角空白がある場合,半角空白を削除します。

    (例)

    CONVERT(123,VARCHAR(3),'LJ999')

    →'123'

  • 二重引用符(")で囲まれた文字列中の半角空白は編集対象になりません。

■文字データを数データに変換する場合

  • 要素LJを指定しても無視されます。後続の数値書式に従って数データに変換されます。

指定規則

LJは数値書式に1回だけ指定できます。

17

そのほか

B

■数データを文字データに変換する場合

  • 変換対象データの値(数値書式の桁数で丸めた結果)が0の場合,半角空白を設定します。符号要素および通貨要素も半角空白を設定します。

    (例)

    CONVERT(0,CHAR(4),'B999')

    →'△△△△'

    CONVERT(0,VARCHAR(4),'LJB999')

    →''

■文字データを数データに変換する場合

  • 要素Bを指定しても無視されます。後続の数値書式に従って数データに変換されます。

18

TM

TM9

TME

■数データを文字データに変換する場合

  • 数データを指定された要素(TMTM9,またはTME)に従って変換します。

    TMまたはTM9:整数定数または10進数定数の表記に従って変換します。

    TME:浮動小数点数定数の表記に従って変換します。

    (例)

    CONVERT(1.28E2,CHAR(3),'TM')

    →'128'

    CONVERT(128,CHAR(6),'TME')

    →'1.28E2'

    数データを数定数の形式に変換した結果を文字データとして出力します。その際,数定数で表現可能な形式のうち,最も短い形式に変換されます。

  • 数データが,整数定数または10進数定数の表記で表現できない値の場合は,TMまたはTM9を指定しても浮動小数点数定数の表記に変換されます。

■文字データを数データに変換する場合

  • TMTM9,またはTMEのどれを指定しても変換結果は同じになります。

  • 文字データは,次に示す定数の表記法に従っている必要があります。

    ・整数定数

    ・10進数定数

    ・浮動小数点数定数

    また,文字データ中に分離符号が指定できます。ただし,分離符号は変換対象にはなりません。

    (例)

    CONVERT('結果 /* 注釈 */ 12345',INTEGER,'"結果"TM')

    →12345

(c) 数値書式に関する規則

  • 数値書式の長さは,64バイト以内にしてください。

  • 数値書式に指定する文字は,二重引用符(")で囲まれた文字列以外は,半角文字で指定してください。

  • EEEEX,または二重引用符で囲まれた文字列中の文字以外の文字は,大文字,小文字のどちらで指定しても,同じ数値書式の要素として扱われます。

  • 文字データを数データに変換する場合,数値書式中に数要素を指定してください。ただし,最短表記の要素TMTM9TME,または16進数要素を指定した場合は,数要素の指定は必要ありません。

  • 小数点文字(.)の直前に数要素を指定しない場合は,小数点文字(.)の直後に数要素を指定してください。

  • 通貨要素,小数点文字(.),またはBを数値書式に指定した場合,数要素を指定してください。

  • 数値書式に修飾要素を指定した場合,数要素または16進数要素を指定してください。

  • 符号要素Sは,数要素の前方または後方のどちらにも指定できます。

  • 符号要素MIまたはPRは数要素の後方にだけ指定できます。

  • 符号要素を指定する場合は,SMI,またはPRのどれか1つを指定してください。

  • 数値書式に指定する文字列には,次に示す要素に限り2つ以上指定できます。そのほかの要素については,2つ以上指定できません。

    • 区切り文字要素のコンマ

    • 区切り文字要素の半角空白

    • 数要素(0および9

    • "文字列"(二重引用符で囲まれた文字列)

    • 16進数要素(Xおよびx

(5) 規則

(a) 共通の規則

  1. 実行結果のデータ型は,変換後のデータ型に指定したデータ型になります。ただし,変換後のデータ型NUMERIC型が指定された場合,実行結果のデータ型はDECIMAL型になります。また,変換後のデータ型FLOAT型が指定された場合,実行結果のデータ型はDOUBLE PRECISION型になります。

  2. 変換対象データに?パラメタを単独で指定した場合,変換後のデータ型が?パラメタのデータ型として仮定されます。ただし,変換後のデータ型NUMERIC型が指定された場合は,?パラメタのデータ型にはDECIMAL型が仮定されます。また,変換後のデータ型FLOAT型が指定された場合は,?パラメタのデータ型にはDOUBLE PRECISION型が仮定されます。

  3. 実行結果の値は,非ナル値制約なし(ナル値を許す)となります。

  4. 変換対象データがナル値の場合,または変換対象データにNULLを指定した場合,実行結果はナル値になります。

  5. 変換対象データが,実長0バイトまたは実長0文字の文字データの場合,次のように変換されます。

    • CHAR型に変換する場合:半角空白に変換されます。CHAR(3)の場合,'△△△'に変換されます。△は半角空白を意味しています。

    • VARCHAR型に変換する場合:実長0バイトまたは実長0文字のVARCHAR型のデータに変換されます。

    • BINARY型に変換する場合:X'00'に変換されます。BINARY(3)の場合,X'000000'に変換されます。

    • VARBINARY型に変換する場合:実長0バイトのVARBINARY型のデータに変換されます。

    • 上記以外のデータ型の場合:ナル値に変換されます。

  6. データ型の変換可否(書式指定なしの場合)を次の表に示します。

    表8‒55 データ型の変換可否(書式指定なしの場合)

    変換対象データのデータ型

    変換後のデータ型

    INTEGER,

    SMALLINT

    DECIMAL,

    NUMERIC,

    DOUBLE PRECISION

    FLOAT

    CHAR,

    VARCHAR

    DATE,TIMESTAMP

    TIME

    BINARY,

    VARBINARY

    INTEGER,

    SMALLINT

    ×

    ×

    DECIMAL,

    NUMERIC

    DOUBLE PRECISION

    FLOAT

    ×

    ×

    ×

    CHAR,

    VARCHAR

    DATE,

    TIMESTAMP

    ×

    ×

    ×

    TIME

    ×

    ×

    ×

    ×

    BINARY,

    VARBINARY

    ×

    ×

    ×

    ×

    (凡例)

    ○:変換できます。

    ×:変換できません。

  7. データ型の変換可否(書式指定ありの場合)を次の表に示します。

    表8‒56 データ型の変換可否(書式指定ありの場合)

    変換対象データのデータ型

    変換後のデータ型

    INTEGER,

    SMALLINT

    DECIMAL,

    NUMERIC,

    DOUBLE PRECISION

    FLOAT

    CHAR,

    VARCHAR

    DATE,TIMESTAMP

    TIME

    BINARY,

    VARBINARY

    INTEGER,

    SMALLINT

    ×

    ×

    ※1

    ×

    ×

    ×

    DECIMAL,

    NUMERIC

    DOUBLE PRECISION

    FLOAT

    ×

    ×

    ※1

    ×

    ×

    ×

    CHAR,

    VARCHAR

    ※1

    ※1

    ×

    ※2

    ※2

    ×

    DATE,

    TIMESTAMP

    ×

    ×

    ※2

    ×

    ×

    ×

    TIME

    ×

    ×

    ※2

    ×

    ×

    ×

    BINARY,

    VARBINARY

    ×

    ×

    ×

    ×

    ×

    ×

    (凡例)

    ○:変換できます。

    ×:変換できません。

    注※1

    数値書式を指定した場合に変換できます。

    注※2

    日時書式を指定した場合に変換できます。

  8. 書式指定を指定した場合,書式指定の指定に従って変換したあとに,格納代入の規則に従って変換後のデータ型に変換します。

    書式指定については,日時書式の場合は「(3) 日時書式に指定できる要素および規則」を,数値書式の場合は「(4) 数値書式に指定できる要素および規則」を参照してください。

    格納代入の規則については,「6.2.2 変換,代入,比較できるデータ型」の「(2) 格納代入できるデータ型」を参照してください。

(b) 数データに変換する場合の規則

■数データを数データに変換する場合

数データを数データに変換する場合,「6.2.2 変換,代入,比較できるデータ型」の「(2) 格納代入できるデータ型」の「数データの格納代入」で説明している規則が適用されます。

■文字データを数データに変換する場合(数値書式の指定なしの場合)
  • 変換対象の文字データ(文字データの前後の半角空白を取り除いた結果)が,数定数の記述形式の規則を満たしている必要があります。数定数の記述形式の規則については,「6.3.2 定数の記述形式」を参照してください。

    <変換できる文字データの例>

    '219','+56','-3547','-11.35','887△△','△95△'

    <変換できない文字データの例>

    'a89','77g9','33△49'

    (凡例)△:半角空白

  • 文字データが半角空白だけで構成されている場合,ナル値を返します。

  • 数定数の文字列表現を数値に変換したあとに,変換後のデータ型に変換します。その際,「6.2.2 変換,代入,比較できるデータ型」の「(2) 格納代入できるデータ型」の「数データの格納代入」で説明している規則が適用されます。

    (例)

    CONVERT('11.35',INTEGER) → 11

    いったん文字列'11.35'DECIMAL型の数値11.35に変換され,そのあとにINTEGER型の数値に変換されます。その際,数データの格納代入の規則が適用され,この例の場合,小数点以下が切り捨てられます。

■文字データを数データに変換する場合(数値書式の指定ありの場合)
  • 変換対象の文字データの形式と,数値書式の指定を合わせてください。なお,変換対象の文字データの前後に半角空白があっても変換できます。また,数値書式の前後に半角空白があっても変換できます。

    (例)

    CONVERT('△1,234△',INTEGER,'9,999') → 1234

    CONVERT('△△1,234',INTEGER,'△9,999△') → 1234

    (凡例)△:半角空白

  • 文字データが半角空白だけで構成されている場合,ナル値を返します。

  • 数値書式に二重引用符で囲まれた文字列がある場合,二重引用符で囲まれた文字列,および二重引用符で囲まれた文字列の前後にある半角空白を除いた文字データを数値書式に従って数データに変換します。

  • 数値書式に従って数値に変換したあとに,変換後のデータ型に変換します。その際,「6.2.2 変換,代入,比較できるデータ型」の「(2) 格納代入できるデータ型」の「数データの格納代入」で説明している規則が適用されます。

    (例)

    CONVERT('1,000.22',INTEGER,'9,999.99') → 1000

    いったん文字列'1,000.22'DECIMAL型の数値1000.22に変換され,そのあとにINTEGER型の数値に変換されます。その際,数データの格納代入の規則が適用され,この例の場合,小数点以下が切り捨てられます。

■日時データを数データに変換する場合

西暦1年1月1日からの通算日に変換されます。西暦1年1月1日の場合,通算日は1になります。西暦1年1月2日の場合,通算日は2になります。

(例)

CONVERT(DATE'0001-01-03',INTEGER) → 3

CONVERT(TIMESTAMP'0001-01-05 11:03:58',INTEGER) → 5

(c) 文字データに変換する場合の規則

文字データへの変換規則(データ長に関する規則)を次の表に示します。

表8‒57 文字データへの変換規則(データ長に関する規則)

変換時の条件

文字データへの変換規則

変換対象データのデータ型が文字データまたはバイナリデータの場合

変換対象データのデータ型が左記以外の場合

ABの場合

変換後のデータ型がCHAR型の場合は,データを左詰めにして,余りに半角空白が格納されます。

ABの場合

変換されます。

ABの場合

データを左詰めにして,余った部分を切り捨てます。※1

変換できません。エラーになります。※2

(凡例)

A:変換対象データを文字データに変換した長さ

B:変換後のデータ型のデータ長

注※1

マルチバイト文字の途中で切り捨てが発生した場合,マルチバイト文字の一部分が実行結果の値として返されます。

注※2

変換対象データのデータ型がDOUBLE PRECISIONまたはFLOATで,かつ数値書式を指定していない場合は,変換後のデータ型に指定したデータ長に収まるように仮数の小数点以下を切り捨てるため(最近接偶数への丸めを行うため),エラーにはなりません。ただし,仮数の小数点以下すべてを切り捨てても,変換後のデータ型に指定したデータ長を超える場合は,エラーになります。

INTEGER型,SMALLINTDECIMAL,またはNUMERICの数データを文字データに変換する場合(数値書式の指定なしの場合)
  • 数データを数定数の形式に変換した結果を文字データとして出力します。その際,数定数で表現可能な形式のうち,最も短い形式で結果が出力されます。

    ただし,DECIMALまたはNUMERICのデータの場合は,次のように変換されます。

    ・小数点以下の桁数は,数データのデータ型の位取りと同じになり,末尾からの0は削除されません。

    ・「数データのデータ型の精度>位取り」の場合,整数部の桁数は0にはなりません。

    ・小数点は必ず付加されます。

    (例)+0025.100 → '25.100'

    上記のように,の符号は削除されます。また,整数部分の先頭からの0は削除されます。

  • 変換対象データが0未満の場合,先頭に負符号()が付加されます。

DOUBLE PRECISIONまたはFLOATの数データを文字データに変換する場合(数値書式の指定なしの場合)
  • 数データを浮動小数点数定数の形式に変換した結果を文字データとして出力します。その際,浮動小数点数定数で表現可能な形式のうち,最も短い形式で結果が出力されます。

    (例)

    +1.0000000000000000E+010 → '1E10'

    +3.2000000000000000E+001 → '3.2E1'

    +0.1000000000000000E+001 → '1E0'

    +0.0000000000000000E+000 → '0E0'

    上記のように,仮数のの符号は削除され,小数点以下の末尾からの0も削除されます。指数のの符号は削除され,指数の先頭からの0も削除されます。

  • 変換対象データが0未満の場合は,先頭に負符号()が付加されます。

  • 0未満の指数には,先頭に負符号()が付加されます。

■数データを文字データに変換する場合(数値書式の指定ありの場合)
  • 数データを数定数の形式に変換し,指定された数値書式に従って文字データに変換します。

    CONVERT(1000,VARCHAR(6),'LJ$9,999') → '$1,000'

  • 数データが数値書式に従って変換できない場合は,#を埋め込んだ文字列を返します。数値書式に従って,区切り文字,通貨要素,小数点文字,符号,数要素,二重引用符で囲まれた文字列を#に置き換えます。文字列に全角文字を指定した場合は,文字サイズ(バイト)分#に置き換えます。

    (例)

    CONVERT(1000,CHAR(3),'99') → '###'

■日時データを文字データに変換する場合(日時書式の指定なしの場合)
  • 日時データを文字データに変換する場合,既定の出力表現の形式に変換されます。DATE型のデータを文字データに変換する場合は,日付を表す既定の出力表現の形式に変換されます。TIME型のデータを文字データに変換する場合は,時刻を表す既定の出力表現の形式に変換されます。TIMESTAMP型のデータを文字データに変換する場合は,時刻印を表す既定の出力表現の形式に変換されます。既定の出力表現については,「6.3.3 既定の文字列表現」を参照してください。

    (例)

    CONVERT(DATE'2013-06-30',CHAR(10)) → '2013-06-30'

    CONVERT(DATE'0001-01-01',CHAR(10)) → '0001-01-01'

    CONVERT(TIME'05:33:48.123',CHAR(12)) → '05:33:48.123'

    CONVERT(TIMESTAMP'2013-06-30 11:03:58',CHAR(19)) → '2013-06-30 11:03:58'

  • 日時データをCHAR(n)またはVARCHAR(n)に変換する場合,次の条件を満たす必要があります。

    変換対象データのデータ型

    変換後のデータ長の条件

    DATE

    n≧10

    TIME(p)

    p=0の場合

    n≧8

    p>0の場合

    n≧9+p

    TIMESTAMP(p)

    p=0の場合

    n≧19

    p>0の場合

    n≧20+p

    nが上記の長さより短い場合は変換できません。

  • DATE型のデータをCHAR型に変換する場合,変換後のデータのデータ長が11バイト以上のときは,データを左詰めにして,余りに半角空白が格納されます。

    (例)

    CONVERT(DATE'2013-06-30',CHAR(15)) → '2013-06-30△△△△△'

    (凡例)△:半角空白

  • 小数秒精度がpTIME型のデータをCHAR型に変換する場合,変換後のデータのデータ長が10+pバイト以上(p=0のときは9バイト以上)のときは,データを左詰めにして,余りに半角空白が格納されます。

    (例)

    CONVERT(TIME'11:03:58.123',CHAR(13)) → '11:03:58.123△'

    (凡例)△:半角空白

  • 小数秒精度がpTIMESTAMP型のデータをCHAR型に変換する場合,変換後のデータのデータ長が21+pバイト以上(p=0のときは20バイト以上)のときは,データを左詰めにして,余りに半角空白が格納されます。

    (例)

    CONVERT(TIMESTAMP'2013-06-30 11:03:58',CHAR(20)) → '2013-06-30 11:03:58△'

    (凡例)△:半角空白

■日時データを文字データに変換する場合(日時書式の指定ありの場合)
  • 指定した日時書式に従って,日時データを文字データに変換します。

  • 変換対象の日時データにない日時書式の要素を指定した場合,その要素の部分については文字列が補われます。

    (例)

    CONVERT(DATE'2013-07-30',CHAR(16),'YYYY/MM/DD HH:MI') → '2013/07/30 00:00'

    上記の例の場合,変換対象の日時データがDATE型のため,時刻の要素がありませんが,日時書式の要素に時刻(HHおよびMI)を指定しているため,その部分については'00'が補われます。

    補われる文字列を次の表に示します。

    表8‒58 日時書式の要素に補われる文字列

    項番

    日時書式の要素

    補われる文字列

    1

    HH

    '00'

    2

    HH24

    3

    HH12

    '12'

    4

    午前/午後

    AM

    'AM'

    5

    A.M.

    'A.M.'

    6

    PM

    'AM'

    7

    P.M.

    'A.M.'

    8

    AMN

    '午前'

    9

    PMN

    10

    MI

    '00'

    11

    SS

    '00'

    12

    SSSSS

    '00000'

    13

    小数秒

    FF1

    対象データの小数秒精度より右側の桁に0が補われます。

    14

    FF2

    15

    FF3

    16

    FF4

    17

    FF5

    18

    FF6

    19

    FF7

    20

    FF8

    21

    FF9

    22

    FF10

    23

    FF11

    24

    FF12

  • 日時データをCHAR型に変換する際,変換後のデータ型に指定したデータ長が変換後のデータ長より長い場合は,データを左詰めにして,余りに半角空白が格納されます。

    (例)

    CONVERT(DATE'2013-07-30',CHAR(12),'YYYY/MM/DD') → '2013/07/30△△'

    (凡例)△:半角空白

  • 日時データを文字データに変換する際,日時書式の要素にMONMONTHDAY,またはDYを指定した場合,1文字目と2文字目に指定した文字が大文字であるか小文字であるかによって,変換後の文字列が次のように変わります。

    ・1文字目が小文字の場合,変換後の文字列は,すべて小文字になります。

    ・1文字目が大文字で2文字目が小文字の場合,変換後の文字列は,1文字目が大文字,2文字目以降は小文字になります。

    ・1文字目と2文字目が大文字の場合,変換後の文字列は,すべて大文字になります。

    例を次に示します。

    日時書式の要素の指定

    変換後の文字列

    mon

    'jan'

    Mon

    'Jan'

    MONまたはMOn

    'JAN'

    上記は,1月の場合を例にしています。

  • 日時書式にFF1FF11を指定した場合,「変換対象データの小数秒の桁数>日時書式の要素の小数秒の桁数」のときは,日時書式の要素の小数秒の桁数を超えた部分は切り捨てられます。

    (例)

    CONVERT(TIME'15:16:17.123456',CHAR(9),'HHMISS.FF2') → '151617.12'

■バイナリデータを文字データに変換する場合
  • データ型が変換されるだけで,データの内容(文字コード自体)は変換されません。

    (例)

    CONVERT(X'61626364',CHAR(4)) → 'abcd'

  • 変換対象データのデータ長>変換後のデータ型のデータ長」の場合,末尾が切り捨てられます。

    (例)

    CONVERT(X'61626364',CHAR(3)) → 'abc'

    下線部分が切り捨てられます。

  • 変換対象データのデータ長<変換後のデータ型のデータ長」の場合,末尾に半角空白が格納されます。

    (例)

    CONVERT(X'61626364',CHAR(5)) → 'abcd△'

    (凡例)△:半角空白

(d) 日時データに変換する場合の規則

INTEGER型またはSMALLINT型の数データを日時データに変換する場合
  • 西暦1年1月1日を起点として,DATE型またはTIMESTAMP型のデータに変換されます。

    (例)

    CONVERT(2,DATE) → DATE'0001-01-02'

  • TIMESTAMP型の時刻部分は'00:00:00'に変換され,小数秒部分には0が補われます。

    (例)

    CONVERT(2,TIMESTAMP(3)) → TIMESTAMP'0001-01-02 00:00:00.000'

  • INTEGER型またはSMALLINT型のデータが13,652,059の場合に変換できます。範囲外の場合はエラーになります。

■文字データを日時データに変換する場合(日時書式の指定なしの場合)
  • 変換対象の文字データ(文字データの前後の半角空白を取り除いた結果)が,日付を表す既定の入力表現の形式に従っている場合に限り,文字データをDATE型のデータに変換できます。日付を表す既定の入力表現については,「6.3.3 既定の文字列表現」の「(1) 日付を表す既定の文字列表現」の「(a) 既定の入力表現」を参照してください。

    (例)

    CONVERT('2014-07-22△△',DATE) → DATE'2014-07-22'

    <変換できる文字データの例>

    '2014-06-30','0001-01-02','△△2014-07-30','△2014/07/30△△'

    <変換できない文字データの例>

    '2013△06△30','2013.06.30'

    (凡例)△:半角空白

  • 変換対象の文字データ(文字データの前後の半角空白を取り除いた結果)が,時刻を表す既定の入力表現の形式に従っている場合に限り,文字データをTIME型のデータに変換できます。時刻を表す既定の入力表現については,「6.3.3 既定の文字列表現」の「(2) 時刻を表す既定の文字列表現」の「(a) 既定の入力表現」を参照してください。

    (例)

    CONVERT('△19:46:23.123456',TIME(6)) → TIME'19:46:23.123456'

    <変換できる文字データの例>

    '18:05:22','10:21:44.123','△△10:21:44.123456△'

    <変換できない文字データの例>

    '18△05△22','10:21:44△123456'

    (凡例)△:半角空白

  • 変換対象の文字データ(文字データの前後の半角空白を取り除いた結果)が,時刻印を表す既定の入力表現の形式に従っている場合に限り,文字データをTIMESTAMP型のデータに変換できます。時刻印を表す既定の入力表現については,「6.3.3 既定の文字列表現」の「(3) 時刻印を表す既定の文字列表現」の「(a) 既定の入力表現」を参照してください。

    (例)

    CONVERT('2014/08/02 11:03:58.123456△',TIMESTAMP(6)) → TIMESTAMP'2014-08-02 11:03:58.123456'

    <変換できる文字データの例>

    '2014-06-30 11:03:58','2014/07/30 11:03:58.123','△2014/07/30 11:03:58.123456789△△'

    <変換できない文字データの例>

    '2014-06-30 11-03-58''2014/07/30 11:03:58:123456'

    (凡例)△:半角空白

  • 「変換対象の文字データの小数秒の桁数>変換後のデータ型の小数秒の桁数」の場合,変換後のデータ型の小数秒の桁数を超えた部分の小数秒は切り捨てられます。

    (例)

    CONVERT('19:46:23.123456',TIME(3)) → TIME'19:46:23.123'

  • 「変換対象の文字データの小数秒の桁数<変換後のデータ型の小数秒の桁数」の場合,足りない小数秒部分に0が補われます。

    (例)

    CONVERT('2014-08-02 11:03:58.123',TIMESTAMP(9)) → TIMESTAMP'2014-08-02 11:03:58.123000000'

  • 文字データが半角空白だけで構成されている場合,ナル値を返します。

■文字データを日時データに変換する場合(日時書式の指定ありの場合)
  • 文字データをDATE型に変換する場合は,日時書式に年,月,日の要素を指定してください。それ以外の要素(例えば,時)を指定しても結果には反映されません。日時書式の要素については,「表8‒52 同じ意味を持つ日時書式の要素」を参照してください。

  • 文字データをTIME型に変換する場合は,日時書式に時,分,秒の要素を指定してください。それ以外の要素(例えば,日)を指定しても結果には反映されません。日時書式の要素については,「表8‒52 同じ意味を持つ日時書式の要素」を参照してください。

  • 文字データをTIMESTAMP型に変換する場合は,日時書式に年,月,日,時,分,秒の要素を指定してください。日時書式の要素については,「表8‒52 同じ意味を持つ日時書式の要素」を参照してください。

  • 変換対象の文字データの先頭と末尾の連続する半角空白を取り除いた結果を,日時書式に従って日時データに変換します。また,日時書式中の文字データの先頭と末尾の連続する半角空白に該当する部分は無視されます。そのため,次のケースはエラーになりません。

    (例)

    CONVERT('△19△46△23△△△',TIME(12),'"△△△"FM△HH△MI△SS△FF△')

    → TIME'19:46:23.000000000000'

    (凡例)△:半角空白

    メモ

    上記の例の場合,半角空白の扱いは次のようになります。

    1. 変換対象の文字データの先頭と末尾の連続する半角空白は無視されます。

      '19△46△23△△△' → '19△46△23'

    2. 日時書式の先頭と末尾の連続する半角空白は無視されます。

      '"△△△"FM△HH△MI△SS△FF' → 'FM△HH△MI△SS△FF'

      "△△△"部分は,文字データの先頭の連続する半角空白に該当するため,無視されます。最後の半角空白は,文字データの末尾の連続する半角空白に該当するため,無視されます。

    3. FMに対応する文字はないため,FMの後の半角空白は文字データの先頭の連続する半角空白に該当し,無視されます。

      'FMHH△MI△SS△FF' → 'FMHH△MI△SS△FF'

    4. 変換対象の文字データに小数秒がないため,FFの前の半角空白は文字データの末尾の連続する半角空白に該当し,無視されます。

      'FMHH△MI△SSFF' → 'FMHH△MI△SSFF'

      小数秒が指定されている場合は,FFの前の半角空白は文字データの末尾の連続する半角空白に該当しません。

  • 文字データが半角空白だけで構成されている場合,ナル値を返します。

  • 日時書式に小数秒の要素を指定しないで,小数秒精度が3以上のTIME型またはTIMESTAMP型のデータに変換する場合,変換後の小数秒の値は0になります。

    (例)

    CONVERT('151617',TIME(3),'HHMISS') → TIME'15:16:17.000'

  • 日時書式の要素を大文字または小文字のどちらで指定しても,同じように変換されます。また,変換対象データが大文字または小文字のどちらでも,同じように変換されます。ただし,二重引用符(")で囲んだ文字列については,大文字,小文字が区別されます。

  • 日時書式にFF,またはFF1FF12のどれかを指定した場合,日時書式に対応する文字列中の数字を切り出して変換します。このとき,数字以外が出現するか,または日時書式の各要素に対応する長さに達するまで数字を切り出して変換します。文字列中の数字が,日時書式の各要素に対応する長さよりも短い場合,足りない部分は0に変換されます。

    (例)

    CONVERT('151617.12',TIME(3),'HHMISS.FF3') → TIME'15:16:17.120'

  • 日時書式にFF,またはFF1FF12のどれかを指定し,かつ「文字データの小数秒の桁数<日時データの小数秒精度」の場合は,小数秒の桁数が足りない部分は0に変換されます。

    (例)

    CONVERT('151617.123',TIME(6),'HHMISS.FF3') → TIME'15:16:17.123000'

  • 日時書式にFF,またはFF1FF12のどれかを指定し,かつ「文字データの小数秒の桁数>日時データの小数秒精度」の場合は,日時データの小数秒精度を超える部分は変換されません。

    (例)

    CONVERT('151617.123456',TIME(3),'HHMISS.FF6') → TIME'15:16:17.123'

■日時データを日時データに変換する場合

日時データを日時データに変換する場合の変換規則を次の表に示します。

表8‒59 日時データを日時データに変換する場合の変換規則

変換対象データのデータ型

変換後のデータ型の指定

変換規則

DATE

DATE

変換されません。

TIMESTAMP(p2)

  • 時刻部分は'00:00:00'に変換されます。

  • 小数秒部分には0が補われます。

TIME(p1)

TIME(p2)

  • p1P2の場合

    変換されません。

  • p1p2の場合

    p2を超えた部分の小数秒は切り捨てられます。

  • p1p2の場合

    足りない小数秒部分には0が補われます。

TIMESTAMP(p1)

DATE

日付部分だけが変換されます。

TIMESTAMP(p2)

  • p1P2の場合

    変換されません。

  • p1p2の場合

    p2を超えた部分の小数秒は切り捨てられます。

  • p1p2の場合

    足りない小数秒部分には0が補われます。

(凡例)

p1p2:小数秒精度

(e) バイナリデータに変換する場合の規則

■文字データをバイナリデータに変換する場合
  • データ型が変換されるだけで,データの内容(文字コード自体)は変換されません。

    (例)

    CONVERT('abcd',BINARY(4)) → X'61626364'

  • 変換対象データのデータ長>変換後のデータ型のデータ長」の場合,末尾が切り捨てられます。

    (例)

    CONVERT('abcd',BINARY(3)) → X'616263'

    下線部分が切り捨てられます。

    マルチバイト文字の途中で切り捨てが発生した場合,マルチバイト文字の一部分が実行結果の値として返されます。

  • 変換対象データのデータ長<変換後のデータ型のデータ長」の場合,末尾にX'00'が格納されます。

    (例)

    CONVERT('abcd',BINARY(5)) → X'6162636400'

■バイナリデータをバイナリデータに変換する場合
  • 変換対象データのデータ長>変換後のデータ型のデータ長」の場合,末尾が切り捨てられます。

    (例)

    CONVERT(X'61626364',BINARY(3)) → X'616263'

    下線部分が切り捨てられます。

    マルチバイト文字の途中で切り捨てが発生した場合,マルチバイト文字の一部分が実行結果の値として返されます。

  • 変換対象データのデータ長<変換後のデータ型のデータ長」の場合,末尾にX'00'が格納されます。

    (例)

    CONVERT(X'61626364',BINARY(5)) → X'6162636400'

(6) 例題

例題1

T1C2列のデータをCHAR型からDATE型に変換し,C2列が2013年7月20日の行を検索します。

C2列には,日時を示すCHAR型のデータが「月//年」の形式で格納されています。

SELECT * FROM "T1"
    WHERE CONVERT("C2",DATE,'MM/DD/YYYY')=DATE'2013-07-20'

[図データ]

例題2

T1C1列のデータがA10101の行を検索し,該当行のC2列のデータをINTEGER型からCHAR型に変換します。変換の際,先頭に通貨記号$を付けて,3桁区切りのコンマも付けます。

SELECT "C1",CONVERT("C2",CHAR(13),'$999,999,999') FROM "T1"
    WHERE "C1"='A10101'

[図データ]

例題3

T1C2列には,通貨記号$と3桁区切りのコンマが付いた価格を表すCHAR型のデータが格納されています。C2列のデータをCHAR型からINTEGER型に変換し,3割引した価格が$1,000以上の行を検索します。

SELECT * FROM "T1"
    WHERE CONVERT("C2",INTEGER,'$9,999')*0.7>=1000

[図データ]