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.21 値式」を参照してください。
なお,変換対象データには,配列データを指定できません。
- 変換後のデータ型:
-
変換後のデータ型を指定します。指定例を次に示します。
-
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'
上記の指定例のYYYY,MM,および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'
上記の指定例の$,0,9,3桁区切りのコンマ(,),ピリオド(.)などを数値書式の要素といいます。数値書式に指定できる要素については,「(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) 日時書式の要素
日時書式に指定できる要素を次の表に示します。
項番 |
日時書式の持つ意味 |
日時書式に指定できる要素 |
説明 |
|
---|---|---|---|---|
1 |
世紀 |
CC |
世紀を意味しています。値の範囲は00〜99です。 なお,00は,100世紀(西暦9901〜9999年)を意味しています。 |
|
2 |
西暦年 |
YYYY |
4桁の西暦年を意味しています。0001〜9999を使用できます。 なお,文字データを日時データに変換する際にYYYYを指定するときは,時代名を指定することはできません。 |
|
3 |
YY |
2桁の西暦年(西暦年の下2桁)を意味しています。値の範囲は00〜99です。 |
||
4 |
時代名 |
E |
日本の時代名の省略形を意味しています。
|
文字データを日時データに変換する際に時代名を指定するときは,和暦年も一緒に指定する必要があります。 |
5 |
EE |
日本の時代名を意味しています。
|
||
6 |
和暦年 |
YYYYN |
4桁の和暦年を意味しています。各時代の対応範囲を次に示します。
|
文字データを日時データに変換する際に和暦年を指定するときは,時代名も一緒に指定する必要があります。 |
7 |
YYN |
2桁の和暦年を意味しています。00〜99を使用できます。 なお,日時データを文字データに変換する場合は,3桁以上の年数については,下2桁だけを変換対象にします。 |
||
8 |
四半期 |
Q |
四半期を意味しています。値の範囲は1〜4です。
|
|
9 |
月 |
MM |
月を意味しています。01〜12を使用できます。 |
|
10 |
MON |
月の英語名の省略形を意味しています。
|
||
11 |
MONTH |
月の英語名を意味しています。
△は,半角空白を意味しています。 |
||
12 |
週 |
W |
月内の週を意味しています。値の範囲は1〜5です。
なお,2月(うるう年を除く)は1〜4となります。 |
|
13 |
WW |
年内の週を意味しています。値の範囲は01〜53です。 例えば,01は1月1日〜1月7日を,02は1月8日〜1月14日を意味しています。 |
||
14 |
日 |
DD |
月初からの通算日を意味しています。01〜該当する月の最終日を使用できます。 |
|
15 |
DDD |
年初からの通算日を意味しています。001〜365(うるう年の場合は001〜366)を使用できます。 例えば,001は1月1日を,002は1月2日を意味しています。032は2月1日を意味しています。 |
||
16 |
曜日 |
D |
数字で表した曜日を意味しています。1〜7を使用できます。
|
|
17 |
DAY |
英語で表した曜日を意味しています。
△は,半角空白を意味しています。 |
||
18 |
DY |
英語で表した曜日の省略形を意味しています。
|
||
19 |
DAYN |
日本語で表した曜日を意味しています。'日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日'を使用できます。 |
||
20 |
DYN |
日本語で表した曜日の省略形を意味しています。'日','月','火','水','木','金','土'を使用できます。 |
||
21 |
時 |
HH |
時を意味しています。00〜23を使用できます。 なお,文字データを日時データに変換する際にHHまたはHH24を指定するときは,午前/午後を指定することはできません。 |
|
22 |
HH24 |
|||
23 |
HH12 |
時を意味しています。01〜12を使用できます。 なお,文字データを日時データに変換する際にHH12を指定するときは,午前/午後も一緒に指定する必要があります。 |
||
24 |
午前/午後 |
AM |
英語の午前または午後を意味しています。※1 |
文字データを日時データに変換する際に午前/午後を指定するときは,HH12も一緒に指定する必要があります。 |
25 |
A.M. |
|||
26 |
PM |
|||
27 |
P.M. |
|||
28 |
AMN |
日本語の午前または午後を意味しています。※2 |
||
29 |
PMN |
|||
30 |
分 |
MI |
分を意味しています。00〜59を使用できます。 |
|
31 |
秒 |
SS |
秒を意味しています。00〜59を使用できます。 |
|
32 |
SSSSS |
秒を意味しています。00000〜86399を使用できます。 深夜0時0分0秒からの経過秒数を意味しています。例えば,午前1時0分0秒は03600になります。 |
||
33 |
小数秒 |
FF |
小数秒を意味しています。 文字データを日時データに変換する場合は,変換後のデータ型の小数秒の桁数になります。 日時データを文字データに変換する場合は,変換対象データの小数秒の桁数になります。
|
|
34 |
FF1 |
小数秒1桁(0〜9)を意味しています。 |
||
35 |
FF2 |
小数秒2桁(00〜99)を意味しています。 |
||
36 |
FF3 |
小数秒3桁(000〜999)を意味しています。 |
||
37 |
FF4 |
小数秒4桁(0000〜9999)を意味しています。 |
||
38 |
FF5 |
小数秒5桁(00000〜99999)を意味しています。 |
||
39 |
FF6 |
小数秒6桁(000000〜999999)を意味しています。 |
||
40 |
FF7 |
小数秒7桁(0000000〜9999999)を意味しています。 |
||
41 |
FF8 |
小数秒8桁(00000000〜99999999)を意味しています。 |
||
42 |
FF9 |
小数秒9桁(000000000〜999999999)を意味しています。 |
||
43 |
FF10 |
小数秒10桁(0000000000〜9999999999)を意味しています。 |
||
44 |
FF11 |
小数秒11桁(00000000000〜99999999999)を意味しています。 |
||
45 |
FF12 |
小数秒12桁(000000000000〜999999999999)を意味しています。 |
||
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
-
-
文字データを日時データに変換する場合,AM,A.M.,PM,またはP.M.のどれを指定しても変換結果はすべて同じになります。対象データ中でAM,A.M.,PM,またはP.M.のどれが使用されていても,日時書式の要素にAM,A.M.,PM,またはP.M.のどれかを指定すれば,変換結果はすべて同じになります。また,大文字,小文字も区別されません。
-
日時データを文字データに変換する場合,AMまたはPMのどちらを指定しても変換結果は同じになります。また,A.M.またはP.M.のどちらを指定しても変換結果は同じになります。A.M.とAM,PMとP.M.は,変換後の文字列中にピリオドが付くかどうかだけが異なります。
-
- 注※2
-
AMNまたはPMNのどちらを指定しても変換結果は同じになります。対応する文字列は,午前の場合は'午前',午後の場合は'午後'になります。
- メモ
-
日時データを文字データに変換する場合は,日時書式のAM,PMなどの指定に関係なく,変換対象の日時データの値によって変換されます。
また,文字データを日時データに変換する場合は,日時書式のAM,PMなどの指定に関係なく,変換対象の文字データ中にあるAM,PMなどの指定に従い変換されます。
(b) 日時書式に関する規則
-
日時書式の長さは,64バイト以内にしてください。
-
日時書式に指定する文字は,二重引用符(")で囲まれた文字列以外は,半角文字で指定してください。
-
日時書式に指定する文字の大文字,小文字は区別されません。ただし,次の文字列については,大文字,小文字が区別されます。
-
AM,A.M.,PM,およびP.M.の1文字目
-
MON,MONTH,DAY,およびDYの1〜2文字目
-
二重引用符(")で囲まれた文字列中の文字
-
-
文字データを日時データに変換する場合,次の日時書式の要素は指定できません。
-
CC(世紀)
-
Q(四半期)
-
WW(年内の週)
-
W(月内の週)
-
YY(2桁で表した西暦年)
-
-
TIME型のデータを文字データに変換する場合,次の日時書式の要素は指定できません。
-
CC(世紀)
-
YYYY,YY(西暦年)
-
E,EE(時代名)
-
YYYYN,YYN(和暦年)
-
Q(四半期)
-
MM,MON,MONTH(月)
-
W,WW(週)
-
DD,DDD(日)
-
D,DAY,DAYN,DY,DYN(曜日)
-
-
文字データを日時データに変換する場合,同じ意味を持つ日時書式の要素を2つ以上指定できません。例えば,次のような指定はできません。
- (例1)'YYYY-MM-DD-YYYY'
-
YYYYを2つ指定できません。
- (例2)'YYYY-MM-DD-EYYN'
-
YYYYとYYNは,同じ意味を持つ日時書式の要素のため,指定できません。
同じ意味を持つ日時書式の要素を次の表に示します。
表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
-
文字データを日時データに変換する際に曜日(D,DAY,DY,DAYN,またはDYN)を指定した場合,曜日と日付の指定に矛盾があってもエラーにはなりません。
-
日時データを文字データに変換する際に,日時書式にAM,A.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つ目の要素をDやDDではなく,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を途中で指定することによって,指定したところから処理を切り替えることができます。
(例)
- [説明]
-
-
MONTHに対応する文字列(この例ではJANUARY△△)の半角空白を削除しません。また,YYYY(この例では0123),DD(この例では01)に対応する数字のゼロサプレスを行いません。
-
MONTHに対応する文字列の後ろの半角空白を削除して,JANUARYと変換します。また,YYYY,DDに対応する数字のゼロサプレスを行い,YYYYを123と,DDを1と変換します。
-
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月を表す数字は,01〜09となっている必要があります(前ゼロが必要になります)。変換対象の文字データ中に前ゼロがない場合は,日時書式の要素に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およびFF1〜FF12の場合は,0の指定を省略できます。例えば,日時書式に'FMHH:MI:SS.FF3'を指定して,0時0分0.000秒のデータを変換する場合,変換対象データが'0:0:0.'であっても変換できます。
-
FMを途中で指定することによって,指定したところから処理を切り替えることができます。
-
FMが指定されている場合,HADBはMM,DDなどの要素に対応する数字の範囲を,数字以外の文字が出現するか,または指定した日時書式の最大文字数に達するかのどちらかで認識しています。数字で指定する日時書式の要素の前ゼロを含めた最大文字数を次の表に示します。
表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) 数値書式の要素
数値書式に指定できる要素を次の表に示します。
なお,表中の△は半角空白を意味しています。
項番 |
要素の種類 |
数値書式に指定できる要素 |
説明 |
---|---|---|---|
1 |
区切り文字要素 |
,(コンマ) |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
2 |
半角空白 |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
|
3 |
小数点文字 |
.(ピリオド) |
小数点の位置をピリオドで指定します。数値書式に指定したピリオドの前の数要素が整数部を表し,ピリオドの後ろの数要素が小数点以下を表します。 ■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
4 |
通貨要素 |
$ |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
5 |
\ |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
|
6 |
数要素 |
0 |
数値の1つの桁を意味し,変換対象データの数値に対応する桁を変換します。ここでは,固定小数点表記で指定する数要素0について説明しています。浮動小数点表記,および16進数表記で指定する数要素0については,浮動小数点要素および16進数要素で説明します。 ■数データを文字データに変換する場合
■文字データを数データに変換する場合
次の場合はエラーになります。
|
7 |
9 |
数値の1つの桁を意味し,変換対象データの数値に対応する桁を変換します。ここでは,固定小数点表記で指定する数要素9について説明しています。浮動小数点表記,および16進数表記で指定する数要素9については,浮動小数点要素および16進数要素で説明します。 ■数データを文字データに変換する場合
■文字データを数データに変換する場合
次の場合はエラーになります。
|
|
8 |
浮動小数点要素 |
EEEE eeee |
浮動小数点数定数を示すときに指定します。数要素0または9のどちらを指定しても,同じように変換されます。数値書式の指定例を次に示します。 (例)
注※ 文字データを数データに変換する場合に限り指定できます。 ■数データを文字データに変換する場合
■文字データを数データに変換する場合
次の場合はエラーになります。
|
9 |
符号要素 |
MI |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
10 |
S(先頭にSを指定した場合) |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
|
11 |
S(末尾にSを指定した場合) |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
|
12 |
PR |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
|
13 |
文字列 |
"文字列"(二重引用符で囲まれた文字列) |
数値書式の先頭または末尾に,二重引用符(")で囲んだ文字列を指定できます。全角文字も指定できます。 ■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
14 |
16進数要素 |
X x |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
次の場合はエラーになります。
|
15 |
修飾要素 |
LS |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
16 |
LJ |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
|
17 |
そのほか |
B |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
18 |
TM TM9 TME |
■数データを文字データに変換する場合
■文字データを数データに変換する場合
|
(c) 数値書式に関する規則
-
数値書式の長さは,64バイト以内にしてください。
-
数値書式に指定する文字は,二重引用符(")で囲まれた文字列以外は,半角文字で指定してください。
-
EEEE,X,または二重引用符で囲まれた文字列中の文字以外の文字は,大文字,小文字のどちらで指定しても,同じ数値書式の要素として扱われます。
-
文字データを数データに変換する場合,数値書式中に数要素を指定してください。ただし,最短表記の要素TM,TM9,TME,または16進数要素を指定した場合は,数要素の指定は必要ありません。
-
小数点文字(.)の直前に数要素を指定しない場合は,小数点文字(.)の直後に数要素を指定してください。
-
通貨要素,小数点文字(.),またはBを数値書式に指定した場合,数要素を指定してください。
-
数値書式に修飾要素を指定した場合,数要素または16進数要素を指定してください。
-
符号要素Sは,数要素の前方または後方のどちらにも指定できます。
-
符号要素MIまたはPRは数要素の後方にだけ指定できます。
-
符号要素を指定する場合は,S,MI,またはPRのどれか1つを指定してください。
-
数値書式に指定する文字列には,次に示す要素に限り2つ以上指定できます。そのほかの要素については,2つ以上指定できません。
-
区切り文字要素のコンマ
-
区切り文字要素の半角空白
-
数要素(0および9)
-
"文字列"(二重引用符で囲まれた文字列)
-
16進数要素(Xおよびx)
-
(5) 規則
(a) 共通の規則
-
実行結果のデータ型は,変換後のデータ型に指定したデータ型になります。
ただし,変換後のデータ型に指定したデータ型が,実行結果のデータ型にならないデータ型もあります。
-
変換後のデータ型にBIGINT型が指定された場合,実行結果のデータ型はINTEGER型になります。
-
変換後のデータ型にNUMERIC型が指定された場合,実行結果のデータ型はDECIMAL型になります。
-
変換後のデータ型にFLOAT型が指定された場合,実行結果のデータ型はDOUBLE PRECISION型になります。
-
-
変換対象データに?パラメタを単独で指定した場合,変換後のデータ型が?パラメタのデータ型として仮定されます。
ただし,変換後のデータ型に指定したデータ型が,?パラメタのデータ型として仮定されないデータ型もあります。
-
変換後のデータ型にBIGINT型が指定された場合は,?パラメタのデータ型にはINTEGER型が仮定されます。
-
変換後のデータ型にNUMERIC型が指定された場合は,?パラメタのデータ型にはDECIMAL型が仮定されます。
-
変換後のデータ型にFLOAT型が指定された場合は,?パラメタのデータ型にはDOUBLE PRECISION型が仮定されます。
-
-
実行結果の値は,非ナル値制約なし(ナル値を許す)となります。
-
変換対象データがナル値の場合,または変換対象データにNULLを指定した場合,実行結果はナル値になります。
-
変換対象データが,実長0バイトまたは実長0文字の文字データの場合,次のように変換されます。
-
CHAR型に変換する場合:半角空白に変換されます。CHAR(3)の場合,'△△△'に変換されます。△は半角空白を意味しています。
-
VARCHAR型に変換する場合:実長0バイトまたは実長0文字のVARCHAR型のデータに変換されます。
-
BINARY型に変換する場合:X'00'に変換されます。BINARY(3)の場合,X'000000'に変換されます。
-
VARBINARY型に変換する場合:実長0バイトのVARBINARY型のデータに変換されます。
-
上記以外のデータ型の場合:ナル値に変換されます。
-
-
データ型の変換可否(書式指定なしの場合)を次の表に示します。
表8‒55 データ型の変換可否(書式指定なしの場合) 変換対象データのデータ型
変換後のデータ型
INTEGER,
BIGINT,
SMALLINT
DECIMAL,
NUMERIC,
DOUBLE PRECISION,
FLOAT
CHAR,
VARCHAR
DATE,TIMESTAMP
TIME
BINARY,
VARBINARY
INTEGER,
BIGINT,
SMALLINT
○
○
○
○
×
×
DECIMAL,
NUMERIC,
DOUBLE PRECISION,
FLOAT
○
○
○
×
×
×
CHAR,
VARCHAR
○
○
○
○
○
○
DATE,
TIMESTAMP
○
×
○
○
×
×
TIME
×
×
○
×
○
×
BINARY,
VARBINARY
×
×
○
×
×
○
- (凡例)
-
○:変換できます。
×:変換できません。
-
データ型の変換可否(書式指定ありの場合)を次の表に示します。
表8‒56 データ型の変換可否(書式指定ありの場合) 変換対象データのデータ型
変換後のデータ型
INTEGER,
BIGINT,
SMALLINT
DECIMAL,
NUMERIC,
DOUBLE PRECISION,
FLOAT
CHAR,
VARCHAR
DATE,TIMESTAMP
TIME
BINARY,
VARBINARY
INTEGER,
BIGINT,
SMALLINT
×
×
○※1
×
×
×
DECIMAL,
NUMERIC,
DOUBLE PRECISION,
FLOAT
×
×
○※1
×
×
×
CHAR,
VARCHAR
○※1
○※1
×
○※2
○※2
×
DATE,
TIMESTAMP
×
×
○※2
×
×
×
TIME
×
×
○※2
×
×
×
BINARY,
VARBINARY
×
×
×
×
×
×
- (凡例)
-
○:変換できます。
×:変換できません。
- 注※1
-
数値書式を指定した場合に変換できます。
- 注※2
-
日時書式を指定した場合に変換できます。
-
書式指定を指定した場合,書式指定の指定に従って変換したあとに,格納代入の規則に従って変換後のデータ型に変換します。
書式指定については,日時書式の場合は「(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) 文字データに変換する場合の規則
文字データへの変換規則(データ長に関する規則)を次の表に示します。
変換時の条件 |
文字データへの変換規則 |
|
---|---|---|
変換対象データのデータ型が文字データまたはバイナリデータの場合 |
変換対象データのデータ型が左記以外の場合 |
|
A<Bの場合 |
変換後のデータ型がCHAR型の場合は,データを左詰めにして,余りに半角空白が格納されます。 |
|
A=Bの場合 |
変換されます。 |
|
A>Bの場合 |
データを左詰めにして,余った部分を切り捨てます。※1 |
変換できません。エラーになります。※2 |
- (凡例)
-
A:変換対象データを文字データに変換した長さ
B:変換後のデータ型のデータ長
- 注※1
-
マルチバイト文字の途中で切り捨てが発生した場合,マルチバイト文字の一部分が実行結果の値として返されます。
- 注※2
-
変換対象データのデータ型がDOUBLE PRECISION型またはFLOAT型で,かつ数値書式を指定していない場合は,変換後のデータ型に指定したデータ長に収まるように仮数の小数点以下を切り捨てるため(最近接偶数への丸めを行うため),エラーにはなりません。ただし,仮数の小数点以下すべてを切り捨てても,変換後のデータ型に指定したデータ長を超える場合は,エラーになります。
- ■INTEGER型,BIGINT型,SMALLINT型,DECIMAL型,または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△△△△△'
(凡例)△:半角空白
-
小数秒精度がpのTIME型のデータをCHAR型に変換する場合,変換後のデータのデータ長が10+pバイト以上(p=0のときは9バイト以上)のときは,データを左詰めにして,余りに半角空白が格納されます。
(例)
CONVERT(TIME'11:03:58.123',CHAR(13)) → '11:03:58.123△'
(凡例)△:半角空白
-
小数秒精度がpのTIMESTAMP型のデータを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△△'
(凡例)△:半角空白
-
日時データを文字データに変換する際,日時書式の要素にMON,MONTH,DAY,またはDYを指定した場合,1文字目と2文字目に指定した文字が大文字であるか小文字であるかによって,変換後の文字列が次のように変わります。
・1文字目が小文字の場合,変換後の文字列は,すべて小文字になります。
・1文字目が大文字で2文字目が小文字の場合,変換後の文字列は,1文字目が大文字,2文字目以降は小文字になります。
・1文字目と2文字目が大文字の場合,変換後の文字列は,すべて大文字になります。
例を次に示します。
日時書式の要素の指定
変換後の文字列
mon
'jan'
Mon
'Jan'
MONまたはMOn
'JAN'
上記は,1月の場合を例にしています。
-
日時書式にFF1〜FF11を指定した場合,「変換対象データの小数秒の桁数>日時書式の要素の小数秒の桁数」のときは,日時書式の要素の小数秒の桁数を超えた部分は切り捨てられます。
(例)
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型,BIGINT型,または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型,BIGINT型,またはSMALLINT型のデータが1〜3,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'
(凡例)△:半角空白
- メモ
-
上記の例の場合,半角空白の扱いは次のようになります。
-
変換対象の文字データの先頭と末尾の連続する半角空白は無視されます。
'△19△46△23△△△' → '19△46△23'
-
日時書式の先頭と末尾の連続する半角空白は無視されます。
'"△△△"FM△HH△MI△SS△FF△' → 'FM△HH△MI△SS△FF'
"△△△"部分は,文字データの先頭の連続する半角空白に該当するため,無視されます。最後の半角空白は,文字データの末尾の連続する半角空白に該当するため,無視されます。
-
FMに対応する文字はないため,FMの後の半角空白は文字データの先頭の連続する半角空白に該当し,無視されます。
'FM△HH△MI△SS△FF' → 'FMHH△MI△SS△FF'
-
変換対象の文字データに小数秒がないため,FFの前の半角空白は文字データの末尾の連続する半角空白に該当し,無視されます。
'FMHH△MI△SS△FF' → 'FMHH△MI△SSFF'
小数秒が指定されている場合は,FFの前の半角空白は文字データの末尾の連続する半角空白に該当しません。
-
-
文字データが半角空白だけで構成されている場合,ナル値を返します。
-
日時書式に小数秒の要素を指定しないで,小数秒精度が3以上のTIME型またはTIMESTAMP型のデータに変換する場合,変換後の小数秒の値は0になります。
(例)
CONVERT('151617',TIME(3),'HHMISS') → TIME'15:16:17.000'
-
日時書式の要素を大文字または小文字のどちらで指定しても,同じように変換されます。また,変換対象データが大文字または小文字のどちらでも,同じように変換されます。ただし,二重引用符(")で囲んだ文字列については,大文字,小文字が区別されます。
-
日時書式にFF,またはFF1〜FF12のどれかを指定した場合,日時書式に対応する文字列中の数字を切り出して変換します。このとき,数字以外が出現するか,または日時書式の各要素に対応する長さに達するまで数字を切り出して変換します。文字列中の数字が,日時書式の各要素に対応する長さよりも短い場合,足りない部分は0に変換されます。
(例)
CONVERT('151617.12',TIME(3),'HHMISS.FF3') → TIME'15:16:17.120'
-
日時書式にFF,またはFF1〜FF12のどれかを指定し,かつ「文字データの小数秒の桁数<日時データの小数秒精度」の場合は,小数秒の桁数が足りない部分は0に変換されます。
(例)
CONVERT('151617.123',TIME(6),'HHMISS.FF3') → TIME'15:16:17.123000'
-
日時書式にFF,またはFF1〜FF12のどれかを指定し,かつ「文字データの小数秒の桁数>日時データの小数秒精度」の場合は,日時データの小数秒精度を超える部分は変換されません。
(例)
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)
-
p1=P2の場合
変換されません。
-
p1>p2の場合
p2を超えた部分の小数秒は切り捨てられます。
-
p1<p2の場合
足りない小数秒部分には0が補われます。
TIMESTAMP(p1)
DATE
日付部分だけが変換されます。
TIMESTAMP(p2)
-
p1=P2の場合
変換されません。
-
p1>p2の場合
p2を超えた部分の小数秒は切り捨てられます。
-
p1<p2の場合
足りない小数秒部分には0が補われます。
- (凡例)
-
p1,p2:小数秒精度
-
(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
-
表T1のC2列のデータをCHAR型からDATE型に変換し,C2列が2013年7月20日の行を検索します。
C2列には,日時を示すCHAR型のデータが「月/日/年」の形式で格納されています。
SELECT * FROM "T1" WHERE CONVERT("C2",DATE,'MM/DD/YYYY')=DATE'2013-07-20'
- 例題2
-
表T1のC1列のデータがA10101の行を検索し,該当行のC2列のデータをINTEGER型からCHAR型に変換します。変換の際,先頭に通貨記号$を付けて,3桁区切りのコンマも付けます。
SELECT "C1",CONVERT("C2",CHAR(13),'$999,999,999') FROM "T1" WHERE "C1"='A10101'
- 例題3
-
表T1のC2列には,通貨記号$と3桁区切りのコンマが付いた価格を表すCHAR型のデータが格納されています。C2列のデータをCHAR型からINTEGER型に変換し,3割引した価格が$1,000以上の行を検索します。
SELECT * FROM "T1" WHERE CONVERT("C2",INTEGER,'$9,999')*0.7>=1000