YEAR
Synopsis
YEAR(date-expression) {fn YEAR(date-expression)}
引数
date-expression | Caché 日付整数、ODBC 日付、またはタイムスタンプとして評価される式。この式は、列の名前、他のスカラ関数の結果、または日付やタイムスタンプのリテラルとすることができます。 |
概要
YEAR は、Caché 日付整数、ODBC 形式の日付文字列、またはタイムスタンプを入力として取ります。
date-expression タイムスタンプはデータ型 %Library.TimeStampOpens in a new tab (yyyy-mm-dd hh:mm:ss.fff) です。
date-expression は、%Library.FilemanDate、%Library.FilemanTimestamp、%MV.Date のいずれかのデータ型として指定することもできます。
年 (yyyy) 部分は、1840 から 9999 までの範囲の 4 桁の整数でなければなりません。ただし、ユーザが指定した日付の検証や範囲チェックは行われません。無効な日付 (2005-02-31 など) や範囲外の日付 (1830-02-20 など) を指定しても、YEAR ではその年部分が返されます。1840 ~ 9999 の範囲外の年の値、負の数、および小数は、指定したとおりに返されます。2 桁の年は、4 桁の年に拡張されません。
YEAR は対応する年を 4 桁の整数で返します。
Caché の日付の内部表現と互換性を持たせるために、すべての年の値は、1840 から 9999 までの 4 桁の整数で表記することを強くお勧めします。
TO_DATE および TO_CHAR の各 SQL 関数は、1840 年より前の年を表現できる “ユリウス日” をサポートしています。ObjectScript では、このようなユリウス日をサポートするメソッドを呼び出すことができます。
YEAR は、年の部分が 1 つまたは複数のゼロの文字列 ('0' または '0000') の場合、あるいは非数値の場合に、ゼロを返します。YEAR は、最初の数値文字列を年の値として解釈します。そのため、日付文字列の年の部分を省略したり ('-mm-dd hh:mm:ss')、または日の部分を省略すると ('hh:mm:ss')、1 番目の数値 ('-mm' または 'hh') を年の値として処理します。したがって、不明な年の値に対して、プレースホルダを指定する必要があります。Caché との互換性に関しては、一般的に、9999 が好ましい値です。
年形式の既定は、4 桁の年です。この年表示の既定を変更するには、YEAR_OPTION オプションで SET OPTION コマンドを使用します。
YEAR、MONTH、DAY、DAYOFMONTH、HOUR、MINUTE、SECOND。DATEPART または DATENAME 関数を使用して、同じ要素を取得することもできます。DATEPART および DATENAME では、年の値に対して値と範囲のチェックが行われます。
この関数は、ObjectScript から YEAR()Opens in a new tab メソッド呼び出しを使用して呼び出すこともできます。
$SYSTEM.SQL.YEAR(date-expression)
例
以下の例は、整数 2004 を返します。検証は行われません。
SELECT YEAR('2004-02-16 12:45:37') AS Year_Given
SELECT {fn YEAR(59590)} AS Year_Given
以下の例は、年フィールドに非数値のプレースホルダが含まれているため、年に 0 を返します。区切り文字 (–) は、特定の文字 (列) の後ろに置く必要があります。そうしないと、月が年の値として返されます。
年のプレースホルダとしてのアスタリスク。
SELECT {fn YEAR('*-02-16')} AS Year_Given
年のプレースホルダとしての空白文字。
SELECT YEAR(' -02-16') AS Year_Given
以下の例は、現在の年を返します。
SELECT YEAR(GETDATE()) AS Year_Now
以下の埋め込み SQL の例は、2 つの関数から現在の年を返します。CURRENT_DATE 関数は、DATE データ型を返します。NOW 関数は、TIMESTAMP データ型を返します。YEAR は、両方の入力データ型に 4 桁の年を表す整数を返します。
&sql(SELECT {fn YEAR(CURRENT_DATE)},
{fn YEAR({fn NOW()})} INTO :a,:b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"CURRENT_DATE year is: ",a
WRITE !,"NOW year is: ",b }
以下の埋め込み SQL の例は、無効な日付 (2001 年はうるう年ではない) や範囲外の日付を指定しても、YEAR ではその年部分が返されることを示しています。
SET testdate1="2001-02-29"
SET testdate2="1835-02-19"
&sql(SELECT YEAR(:testdate1),
YEAR(:testdate2) INTO :a,:b)
IF SQLCODE'=0 {
WRITE !,"Error code ",SQLCODE }
ELSE {
WRITE !,"invalid date returns: ",a
WRITE !,"out-of-range date returns: ",b }
QUIT