Oracle Databaseでは、TO_DATE()
関数は引数をDATE
の値に変換します データ型。
構文
構文は次のようになります:
TO_DATE(char [ DEFAULT return_value ON CONVERSION ERROR ]
[, fmt [, 'nlsparam' ] ])
char
引数は、CHAR
の文字列に評価される任意の式にすることができます 、VARCHAR2
、NCHAR
、またはNVARCHAR2
データ型。
オプションのfmt
char
の形式を指定します 。 fmt
を省略した場合 、次に char
デフォルトの日付形式である必要があります。デフォルトの日付形式は、NLS_DATE_FORMAT
によって決定されます。 初期化パラメータ。これ自体はNLS_TERRITORY
によって暗黙的に設定されます。 パラメータですが、明示的に設定することもできます(Oracleセッションの日付形式を確認する方法を参照してください)。
オプションの'nlsparam'
引数は、月と日の名前と略語が提供される言語を指定します。次の形式を取ります:
'NLS_DATE_LANGUAGE = language'
例
実例となる基本的な例は次のとおりです。
SELECT
TO_DATE(
'25-Aug-2030',
'DD-Mon-RRRR'
)
FROM DUAL;
結果:
25/AUG/30
結果の形式は、セッションのNLS_DATE_FORMAT
によって決まります。 パラメータ。 NLS_DATE_FORMAT
の値を確認できます V$NLS_PARAMETERS
にクエリを実行してパラメータを設定します ビュー:
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
結果:
DD/MON/RR
NLS_TIMESTAMP_FORMAT
のデフォルト値 パラメータはNLS_TERRITORY
から派生します パラメータ。私の場合、NLS_TERRITORY
パラメータはAUSTRALIA
です 。
NLS_TERRITORY
を変更するとどうなりますか パラメータを別の領域に移動してから、TO_TIMESTAMP()
を呼び出します もう一度:
ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
SELECT
TO_DATE(
'25-Aug-2030',
'DD-Mon-RRRR'
)
FROM DUAL;
結果:
25-AUG-30
今回は、結果が別の形式で返されます。
または、NLS_TIMESTAMP_FORMAT
の値を変更することもできます。 パラメータを直接。これにより、他のパラメーターに影響を与えることなく、そのパラメーターが変更されます。詳細と例については、Oracleセッションで日付形式を変更する方法を参照してください。
デフォルトの形式
この例では、 fmt
を省略しています。 引数:
SELECT
TO_DATE(
'25-AUG-30'
)
FROM DUAL;
結果:
25-AUG-30
これを行うとき、引数はDATE
のデフォルト形式である必要があります NLS_DATE_FORMAT
によって決定されるデータ型 初期化パラメータ。
この形式に準拠していない値を渡すとどうなるかの例を次に示します。
SELECT
TO_DATE(
'2030-08-25'
)
FROM DUAL;
結果:
Error report - ORA-01861: literal does not match format string
これを修正するには、入力を変更するか、NLS_DATE_FORMAT
の値を変更する必要があります。 パラメータ。
通常、フォーマットモデルを省略することはお勧めできません。つまり、この関数を使用するときは、常にフォーマットモデルを提供することをお勧めします。フォーマットモデルを構築するときに使用できる日時フォーマット要素の完全なリストは次のとおりです。
変換エラー時にデフォルト値を提供する
引数をDATE
に変換中にエラーが発生した場合に、値を返すオプションもあります。 タイプ。
例:
SET NULL 'null';
SELECT
TO_DATE(
'Oops!'
DEFAULT null ON CONVERSION ERROR
)
FROM DUAL;
結果:
null
この場合、null
を指定しました 変換エラーが発生した場合は常に返される必要があります。
デフォルトでは、SQLclおよびSQL * Plusは、null
の場合は常に空白を返します。 SQL SELECT
の結果として発生します 声明。
ただし、SET NULL
は使用できます 返される別の文字列を指定します。ここでは、文字列null
を指定しました 返却する必要があります。
'nlsparam'
引数
オプションの'nlsparam'
引数は、月と日の名前と略語が提供される言語を指定します。次の形式を取ります:
'NLS_DATE_LANGUAGE = language'
例
SELECT
TO_DATE(
'25-agosto-2030',
'DD-Month-RRRR',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
結果:
25-AUG-30
結果は、現在のセッションのNLS_DATE_FORMAT
に従って引き続き返されることに注意してください。 パラメータ。 入力だけです 別の言語でした。
agosto
を変更するとどうなりますか August
へ 同じ'nlsparam'
を使用している間 値:
SELECT
TO_DATE(
'25-August-2030',
'DD-Month-RRRR',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
結果:
Error report - ORA-01843: not a valid month
これは、'nlsparam'
で指定された言語で日付を指定しなかったために発生しました 引数(スペイン語)。
English
に変更する この問題を解決します:
SELECT
TO_DATE(
'25-August-2030',
'DD-Month-RRRR',
'NLS_DATE_LANGUAGE = English'
)
FROM DUAL;
結果:
25-AUG-30
役立つ場合は、Oracleでサポートされている言語のリストを返す方法を参照してください。
ヌル引数
null
を渡す 結果はnull
:
SET NULL 'null';
SELECT
TO_DATE(null)
FROM DUAL;
結果:
null
無効な引数カウント
引数を渡さずに関数を呼び出すと、エラーが発生します:
SELECT TO_DATE()
FROM DUAL;
結果:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"
また、あまりにも多くの引数を渡すと、エラーが発生します:
SELECT
TO_DATE(
'25-Aug-2030',
'DD-Mon-RRRR',
'NLS_DATE_LANGUAGE = English',
'Gosh',
'Dang'
)
FROM DUAL;
結果:
SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function"