リテラル
text
'の表記法を、各国文字リテラルはN'text'
の表記法を、数値リテラルはリテラルのコンテキストに応じてinteger
またはnumber
の表記法を使用して指定できます。
テキスト・リテラル
string
に値を指定するときには、必ずこのテキスト・リテラルの表記法を使用してください。 char
が使用されている場合、テキスト・リテラルを指定するか、または文字データに変換する他の式(たとえば、hr.employees
表のlast_name
列)を指定します。 char
がある場合、一重引用符で囲む必要はありません。
N
またはn
は、各国語文字セット(NCHAR
またはNVARCHAR2
データ)を使用してリテラルを指定します。 ORA_NCHAR_LITERAL_REPLACE
にTRUE
を設定してください。 n'
を透過的に内部で置き換え、SQLの処理中にテキスト・リテラルを保持します。
-
c
は、データベース文字セットの任意の要素です。リテラル内の一重引用符(')の前には、エスケープ文字を付ける必要があります。 リテラル内で一重引用符を表すには、一重引用符を2つ使用します。 -
' 'は、テキスト・リテラルの始まりと終わりを示す2つの一重引用符です。
-
Q
またはq
は、代替引用メカニズムが使用されることを示します。このメカニズムを使用すると、様々なデリミタをテキスト文字列に使用できます。 -
一番外側の '
'
は、開始と終了のquote_delimiter
の前後に付ける2つの一重引用符です。 -
c
は、データベース文字セットの任意の要素です。c
で構成されるテキスト・リテラル内に引用符(")を含めることができます。また、一重引用符が直後に付かない quote_delimiter
も含めることができます。 -
quote_delimiter
は、空白、タブおよび改行文字を除く、任意のシングルバイト文字またはマルチバイト文字です。quote_delimiter
には一重引用符も使用できます。ただし、 quote_delimiter
がテキスト・リテラル自体に使用されている場合は、一重引用符を直後に付けないようにしてください。開始の quote_delimiter
が[
、{
、<
または(
のいずれかである場合、終了のquote_delimiter
も対応する]
、}
、>
または)
である必要があります。それ以外の場合は常に、開始および終了の quote_delimiter
は同じ文字である必要があります。
CHAR
データ型とVARCHAR2
データ型の両方のプロパティを持ちます。
-
式と条件の中のテキスト・リテラルは、Oracleによって CHAR
データ型として扱われ、空白埋め比較セマンティクスで比較されます。 -
テキスト・リテラルの最大長は、初期化パラメータが MAX_STRING_SIZE
=
STANDARD
の場合は4,000バイトになり、MAX_STRING_SIZE
=
EXTENDED
の場合は32,767になります。詳細は、拡張データ型を参照してください。
'Hello' 'ORACLE.dbs' 'Jackie''s raincoat' '09-MAR-98' N'nchar literal'
q'!name LIKE '%DBMS_%%'!' q'<'So,' she said, 'It's finished.'>' q'{SELECT * FROM employees WHERE last_name = 'Smith';}' nq'ï Ÿ1234 ï' q'"name like '['"'
数値リテラル
整数リテラル
integer
(整数)に値を指定するときには、必ずこの表記法を使用してください。
NUMBERおよび浮動小数点リテラル
number
またはn
(数)に値を指定するときには、必ずこれらの表記法を使用してください。
-
+は正、-は負の値を示します。 符号を省略すると、デフォルトで正の値になります。 -
digit
は0、1、2、3、4、5、6、7、8、9のいずれかです。 -
eまたはEは、数が科学表記法で指定されることを示します。 Eの後の数字が指数を示します。 指数は-130から125の範囲で指定します。 -
fまたはFは、数が BINARY_FLOAT
型の32ビットの2進浮動小数点数であることを示します。 -
dまたはDは、数が BINARY_DOUBLE
型の64ビットの2進浮動小数点数であることを示します。f(F)およびd(D)を省略すると、数は NUMBER
型になります。接尾辞f(F)およびd(D)は、浮動小数点数リテラルでのみサポートされます。文字列では NUMBER
に変換されるため、サポートされません。たとえば、Oracleが NUMBER
を想定している場合に、文字列'9'
を使用すると、文字列は数字の9に変換されます。ただし、文字列 '9f'
を使用すると、変換は行われず、エラーが戻されます。
NUMBER
型の数値は、最大38桁の精度を記憶できます。 NUMBER
、BINARY_FLOAT
またはBINARY_DOUBLE
で提供される精度以上の精度がリテラルに必要な場合、値は切り捨てられます。 NUMBER
、BINARY_FLOAT
またはBINARY_DOUBLE
でサポートされる範囲を超える場合、エラーが発生します。
NLS_NUMERIC_CHARACTERS
で設定されたものである必要があります。
ALTER SESSION SET NLS_NUMERIC_CHARACTERS=',.';
1.23
では必要な小数点区切り(.)が使用されており、テキスト・リテラル'2,34'
では設定されたNLS小数点区切り(,)が使用されています。
SELECT 2 * 1.23, 3 * '2,34' FROM DUAL; 2*1.23 3*'2,34' ---------- ---------- 2,46 7,02
2*1
と23
のリストのデリミタとして扱われています。
SELECT 2 * 1,23 FROM DUAL; 2*1 23 ---------- ---------- 2 23
SELECT 3 * '2.34' FROM DUAL; * ERROR at line 1: ORA-01722: invalid number
NUMBER
リテラルを示します。
25 +6.34 0.5 25e-03 -1
25f +6.34F 0.5d -1D
|
|
SELECT COUNT(*) FROM employees WHERE TO_BINARY_FLOAT(commission_pct) != BINARY_FLOAT_NAN; |
|
|
SELECT COUNT(*) FROM employees WHERE salary < BINARY_FLOAT_INFINITY; |
|
|
SELECT COUNT(*) FROM employees WHERE TO_BINARY_FLOAT(commission_pct) != BINARY_FLOAT_NAN; |
|
|
SELECT COUNT(*) FROM employees WHERE salary < BINARY_DOUBLE_INFINITY; |
日時リテラル
DATE
、TIMESTAMP
、TIMESTAMP
WITH
TIME
ZONE
およびTIMESTAMP
WITH
LOCAL
TIME
ZONE
の4つの日時データ型をサポートしています。
DATE
値を文字列リテラルに指定するか、文字値や数値をTO_DATE
ファンクションによって日付値に変換できます。 TO_DATE
式を受け入れるのは、DATE
リテラルの場合だけです。
DATE
値をリテラルに指定する場合は、グレゴリオ暦を使用する必要があります。
DATE '1998-12-25'
YYYY-MM-DD
'で指定する必要があります。
TO_DATE('98-DEC-25 17:30','YY-MON-DD HH24:MI')
DATE
値のデフォルトの日付書式は、初期化パラメータNLS_DATE_FORMAT
で指定します。
DATE
列には、常に、日付フィールドと時刻フィールドが含まれます。 DATE
列を問い合せる場合は、問合せで時刻フィールドを指定するか、またはDATE
列の時刻フィールドが真夜中に設定されていることを確認する必要があります。 TRUNC
日付ファンクションを使用します。また、問合せに、等価性や非等価性の条件のかわりに大/小条件を含めることもできます。
row_num
およびDATE
列datecol
を持つ表my_table
があると想定します。
INSERT INTO my_table VALUES (1, SYSDATE); INSERT INTO my_table VALUES (2, TRUNC(SYSDATE)); SELECT * FROM my_table; ROW_NUM DATECOL ---------- --------- 1 03-OCT-02 2 03-OCT-02 SELECT * FROM my_table WHERE datecol > TO_DATE('02-OCT-02', 'DD-MON-YY'); ROW_NUM DATECOL ---------- --------- 1 03-OCT-02 2 03-OCT-02 SELECT * FROM my_table WHERE datecol = TO_DATE('03-OCT-02','DD-MON-YY'); ROW_NUM DATECOL ---------- --------- 2 03-OCT-02
DATE
列の時刻フィールドが真夜中に設定されている場合は、前述の例に示すように、DATE
列に対して問い合せるか、DATE
リテラルを使用して問い合せることができます。
SELECT * FROM my_table WHERE datecol = DATE '2002-10-03'; ROW_NUM DATECOL ---------- --------- 2 03-OCT-02
DATE
列が真夜中以外の値を含む場合、正しい結果を得るためには、問合せで時刻フィールドを排除する必要があります。
SELECT * FROM my_table WHERE TRUNC(datecol) = DATE '2002-10-03'; ROW_NUM DATECOL ---------- --------- 1 03-OCT-02 2 03-OCT-02
TRUNC
ファンクションを適用します。これによって、データの時刻フィールドが真夜中である場合、パフォーマンスが向上します。
-
TO_DATE
ファンクションを使用して、時刻フィールドをマスクします。INSERT INTO my_table VALUES (3, TO_DATE('3-OCT-2002','DD-MON-YYYY'));
-
DATE
リテラルを使用します。INSERT INTO my_table VALUES (4, '03-OCT-02');
-
TRUNC
ファンクションを使用します。INSERT INTO my_table VALUES (5, TRUNC(SYSDATE));
SYSDATE
日付ファンクションは、現在のシステムの日付および時刻を返します。 CURRENT_DATE
ファンクションは、現行のセッションの日付を返します。 SYSDATE
、TO_*
日時ファンクションおよびデフォルト日付書式の詳細は、日時ファンクションを参照してください。
TIMESTAMP
データ型には、年、月、日、時、分、秒および小数秒の値が格納されます。 TIMESTAMP
をリテラルに指定する場合、fractional_seconds_precision
値には最大9桁を指定できます。次に例を示します。
TIMESTAMP '1997-01-31 09:26:50.124'
TIMESTAMP
WITH
TIME
ZONE
データ型はTIMESTAMP
の変形で、値にはタイムゾーン地域名またはタイムゾーン・オフセットが含まれます。 TIMESTAMP
WITH
TIME
ZONE
をリテラルに指定する場合、fractional_seconds_precision
値には最大9桁を指定できます。
TIMESTAMP '1997-01-31 09:26:56.66 +02:00'
TIMESTAMP
WITH
TIME
ZONE
値がUTCで同じ時刻を表す場合は、データに格納されたTIME
ZONE
オフセットにかかわらず、同一であるとみなされます。
TIMESTAMP '1999-04-15 8:00:00 -8:00'
TIMESTAMP '1999-04-15 11:00:00 -5:00'
TZR
(タイムゾーン地域名)書式要素に置換できます。
TIMESTAMP '1999-04-15 8:00:00 US/Pacific'
TZR
および対応するTZD
書式要素の両方を使用します。
TIMESTAMP '1999-10-29 01:30:00 US/Pacific PDT'
SELECT TIMESTAMP '2009-10-29 01:30:00' AT TIME ZONE 'US/Pacific' FROM DUAL;
ERROR_ON_OVERLAP_TIME
セッション・パラメータをTRUE
に設定しておくと、TZD
書式要素を追加しなかったために日時値があいまいな場合、Oracleはエラーを戻します。 FALSE
に設定されている場合、不明確な日時は、指定されている地域の標準時間として解釈されます。
TIMESTAMP
WITH
LOCAL
TIME
ZONE
データ型は、TIMESTAMP
WITH
TIME
ZONE
とは異なり、データベースに格納されるデータはデータベースのタイムゾーンに対して正規化されます。 TIMESTAMP
WITH
LOCAL
TIME
ZONE
にはリテラルはありません。 TIMESTAMP
WITH
LOCAL
TIME
ZONE
列に値を挿入するときに使用できる一部の書式と、問合せによって戻される対応する値を示します。
|
|
|
|
|
|
|
|
|
|
|
|
期間リテラル
YEAR
TO
MONTH
およびDAY
TO
SECOND
の2種類の期間リテラルをサポートします。 YEAR
TO
MONTH
期間では、最も近い月に対する年との期間が考慮されます。 DAY
TO
MINUTE
期間では、最も近い分に対する日との期間が考慮されます。
NUMTOYMINTERVAL
またはNUMTODSINTERVAL
変換ファンクションを使用して、数値データを期間値へ変換できます。
INTERVALYEARTOMONTH
YEAR
TO
MONTH
期間リテラルを指定します。
-
'integer [-integer]'
には、リテラルの先行フィールドおよびオプションの後続フィールドの整数値を指定します。先行フィールドが YEAR
で、後続フィールドがMONTH
の場合、MONTHフィールドの整数値の範囲は0から11です。 -
precision
は、先行フィールドの桁数です。先行フィールド精度の有効範囲は0から9で、デフォルトは2です。
INTERVAL
'0-1
' MONTH
TO
YEAR
は無効です。
INTERVAL
YEAR
TO
MONTH
リテラルは、intervalが123年2か月であることを示しています。
INTERVAL '123-2' YEAR(3) TO MONTH
|
|
|
|
|
|
|
|
|
|
|
|
INTERVAL
YEAR
TO
MONTH
リテラルを別のリテラルに加算または減算して、新しいINTERVAL
YEAR
TO
MONTH
リテラルを作成できます。
INTERVAL '5-3' YEAR TO MONTH + INTERVAL'20' MONTH = INTERVAL '6-11' YEAR TO MONTH
INTERVALDAYTOSECOND
DAY
TO
SECOND
期間リテラルを指定します。
-
integer
は日数を指定します。ここで指定した値の桁数が先行精度で指定した桁数より大きい場合、Oracleはエラーを戻します。 -
time_expr
には、HH
[
:MI
[
:SS
[
.n
]]]
、MI
[
:SS
[
.n
]]
またはSS
[
.n
]
の形式で時間を指定します(ここで、n
は秒の小数部を指定します)。n
の桁数が、fractional_seconds_precision
で指定した数より多い場合、n
はfractional_seconds_precision
値で指定した数に丸められます。先行フィールドが DAY
の場合にのみ、1桁の整数および1つの空白の後にtime_expr
を指定できます。 -
leading_precision
は、先行フィールドの桁数です。0から9までの値を使用できます。 デフォルトは2です。 -
fractional_seconds_precision
は、SECOND
日時フィールドの小数部の桁数です。有効範囲は1から9です。 デフォルトは6です。
INTERVAL
MINUTE
TO
DAY
は無効です。 SECOND
が先行フィールドの場合、期間リテラルは後続フィールドを持つことができません。
-
HOUR
: 0から23 -
MINUTE
: 0から59 -
SECOND
: 0から59.999999999
INTERVAL
DAY
TO
SECOND
リテラルの書式の例を次に示します。省略バージョンも含みます。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DAY
TO
SECOND
期間リテラルを別のDAY
TO
SECOND
期間リテラルに加算または減算できます。
INTERVAL'20' DAY - INTERVAL'240' HOUR = INTERVAL'10-0' DAY TO SECOND