DATENAME
Synopsis
DATENAME(datepart,date-expression)
引数
datepart | 返す日付または時刻の情報のタイプ。日付または時刻の部分の名前 (または省略形)。この名前は大文字でも小文字でも指定できます。引用符で囲んでも囲まなくてもかまいません。datepart はリテラルまたはホスト変数として指定できます。 |
date-expression | datepart 値を返す元となる日付、時刻、またはタイムスタンプ式です。date-expression には、タイプ datepart の値を含める必要があります。 |
概要
DATENAME 関数は、日付/時刻値の指定された部分の名前 (月名の "June" など) を返します。結果はデータ型 VARCHAR(20) として返されます。結果が数値である場合 (日の数字 "23" など) でも、VARCHAR(20) 文字列として返されます。この情報を整数として返すには、DATEPART を使用します。複数の日付部分を含む文字列を返すには、TO_DATE を使用します。
DATENAME では、Sybase および Microsoft SQL Server との互換性が提供されています。
この関数は、ObjectScript から DATENAME()Opens in a new tab メソッド呼び出しを使用して呼び出すこともできます。
$SYSTEM.SQL.DATENAME(datepart,date-expression)
Datepart 引数
datepart 引数は、以下の日付/時刻コンポーネントの 1 つ (1 つのみ) から成る文字列で、正式な名前 (日付部分列) または省略形 (省略形列) のいずれかになります。これらの datepart コンポーネント名と省略形では、大文字と小文字は区別されません。
日付部分 | 省略形 | 返り値 |
---|---|---|
year | yyyy, yy | 1840-9999 |
quarter | qq, q | 1-4 |
month | mm | January、...、December |
week | wk, ww | 1-53 |
weekday | dw | Sunday、Monday、Tuesday、Wednesday、Thursday、Friday、Saturday |
dayofyear | dy, y | 1-366 |
day | dd, d | 1-31 |
hour | hh | 0-23 |
minute | mi, n | 0-59 |
second | ss, s | 0-59 (指定されている場合、秒の小数部が含まれる) |
millisecond | ms | 0-999 (3 桁の精度) |
リテラルとして無効な datepart 値を指定した場合は、SQLCODE -8 エラー・コードが発行されます。一方、ホスト変数として無効な datepart 値を指定した場合は、SQLCODE エラーは発行されず、DATENAME 関数は NULL 値を返します。
このテーブルに示されている返り値は、それぞれの日付部分の既定値です。これらの日付部分のいくつかの返り値は、各種日付/時刻オプションで SET OPTION コマンドを使用することで変更できます。
week : Caché は、Caché の既定のアルゴリズムと ISO 8601 標準アルゴリズムのいずれかを使用して、特定の日付がその年の何週目にあたるかを判定するように構成できます。詳細は、"WEEK" 関数を参照してください。
weekday : Caché の曜日に関する既定では、日曜日を週の最初の曜日として指定します (weekday=1)。ただし、週の最初の曜日を別の値に構成したり、月曜日を週の最初の曜日として指定する ISO 8601 標準を適用することができます。詳細は、"DAYOFWEEK" 関数を参照してください。
second : Caché は、秒を示す date-expression 値、および (指定されている場合) date-expression の精度の秒の小数部が含まれる文字列を返します。
millisecond : Caché は、ミリ秒 (1000 分の 1 秒) 数が含まれる文字列を返します。date-expression に 3 桁より高い精度の小数部がある場合、Caché はそれを 3 桁に切り捨て、この数値を文字列として返します。
datepart は、引用符付き文字列として、または引用符なしで指定できます。以下のように構文に変化があると、実行される操作も少し異なります。
-
引用符あり:DATENAME('month','2004-02-25'):datepart は、クエリ・キャッシュの作成時にリテラルとして扱われます。Caché SQL は、リテラル置換を実行します。これにより、より一般的で再利用可能なクエリ・キャッシュが生成されます。
-
引用符なし:DATENAME(month,'2004-02-25'):datepart は、クエリ・キャッシュの作成時にキーワードとして扱われます。リテラル置換はありません。これにより、より特化したクエリ・キャッシュが生成されます。
日付式の形式
date-expression 引数は、以下のいずれかの形式になります。
-
Caché %Date 論理値 (+$H)
-
Caché %TimeStamp (%Library.TimeStampOpens in a new tab) 論理値 (YYYY-MM-DD HH:MM:SS.FFF)。ODBC 形式とも呼ばれます。
-
Caché %String (互換性のある) 値
Caché %String (互換性のある) 値は、以下のいずれかの形式になります。
-
99999,99999 ($H 形式)
-
Sybase/SQL-Server-date Sybase/SQL-Server-time
-
Sybase/SQL-Server-time Sybase/SQL-Server-date
-
Sybase/SQL-Server-date (既定時刻は 00:00:00)
-
Sybase/SQL-Server-time (既定日付は 01/01/1900)
Sybase/SQL-Server-date は、以下の 5 形式のいずれかです。
mmdelimiterdddelimiter[yy]yy dd Mmm[mm][,][yy]yy dd [yy]yy Mmm[mm] yyyy Mmm[mm] dd yyyy [dd] Mmm[mm]
delimiter は、スラッシュ (/)、ハイフン (-)、またはピリオド (.) です。
年が 2 桁で表示される場合、Caché はスライディング・ウィンドウを確認して日付を解釈します。スライディング・ウィンドウのシステムの既定は、%DATE ユーティリティで設定できます。これは、“InterSystems のドキュメントの使用法” の “旧ドキュメント” の章でのみ説明されています。現在のプロセスのスライディング・ウィンドウの設定の詳細は、ObjectScript の $ZDATE、$ZDATEH、$ZDATETIME、および $ZDATETIMEH の各関数のドキュメントを参照してください。
Sybase/SQL-Server-time は、以下の 3 形式のいずれかです。
HH:MM[:SS:SSS][{AM|PM}] HH:MM[:SS.S] HH['']{AM|PM}
date-expression で時刻形式が設定されているが、日付形式が指定されていない場合、既定で DATENAME は月曜日の曜日値を持つ日付 1900–01–01 になります。
範囲と値のチェック
DATENAME は、入力値に対して以下のチェックを実行します。値がチェックに失敗した場合は、NULL 文字列が返されます。
-
有効な date-expression は、日付文字列 (yyyy-mm-dd)、時刻文字列 (hh:mm:ss)、または日付/時刻文字列 (yyyy-mm-dd hh:mm:ss) で構成されます。日付と時刻の両方が指定されている場合は、両方が有効でなければなりません。例えば、時刻文字列が指定されていない場合は年数値を返すことができますが、無効な時刻文字列が指定されている場合は年数値を返すことができません。
-
日付文字列は完全であると同時に、要素数、各要素の桁数、および区切り文字に適切な形式が使用されている必要があります。例えば、日の値が省略されている場合、年数値を返すことはできません。年は 4 桁で指定される必要があります。
-
時刻文字列は、適切な区切り文字で適切にフォーマットされている必要があります。時刻要素の値はゼロの場合もあるため、1 つ以上の時刻要素を省略でき (区切り文字はそのまま残す場合と省略する場合がある)、これらの要素はゼロ値として返されます。したがって、'hh:mm:ss'、'hh:mm:'、'hh:mm'、'hh::ss'、'hh::'、'hh'、および ':::' は、すべて有効です。時間 (Hour) 要素を省略するには、date-expression に文字列の日付部分がないことと、少なくとも 1 つの区切り文字 (:) があることが必要です。
-
日付/時刻値は、有効な範囲内にある必要があります。年は 1841 から 9999、月は 1 から 12、日は 1 から 31、時間は 0 から 23、分は 0 から 59、秒は 0 から 59 がそれぞれ有効範囲です。
-
月の日数は、該当月と該当年に合ったものでなければなりません。例えば、日付 '02–29' が有効なのは、指定された年がうるう年の場合のみです。
-
日付値または時刻値が 10 よりも小さい場合、そのほとんどの先頭のゼロは、記載、省略のどちらでもかまいません。ただし、10 よりも小さい時間 (Hour) 値が日付/時刻文字列の一部の場合は、その先頭にゼロを付ける必要があります。その他の非標準的な整数値は許可されません。例えば、'07' または '7' は有効な日値ですが、'007'、'7.0'、または '7a' は無効です。
-
date-expression で時刻形式が指定されているが、日付形式が指定されていない場合、DATENAME は時刻コンポーネント値の範囲検証を実行しません。
例
以下の例では、各 DATENAME は 'Wednesday' を返します。指定された日付の曜日 ('dw') であるからです。
SELECT DATENAME('dw','2004-02-25') AS DayName,
DATENAME(dw,'02/25/2004') AS DayName,
DATENAME('DW',59590) AS DayName
以下の例は、指定された日付の月名 ('mm') である 'December' を返します。
SELECT DATENAME('mm','1999-12-20 12:00:00') AS MonthName
以下の例は、指定された日付の年名 ('yy') である '1999' (文字列) を返します。
SELECT DATENAME('yy','1999-12-20 12:00:00') AS Year
上記の例は、日付部分に省略形を使用していることに注意してください。ただし、以下の例のように、正式な名前を指定することもできます。
SELECT DATENAME('year','1999-12-20 12:00:00') AS Year
以下の例では、現在の四半期、年間通算週、および年間通算日が返されます。各値は、文字列として返されます。
SELECT DATENAME('Q',$HOROLOG) AS Q,
DATENAME('WK',$HOROLOG) AS WkCnt,
DATENAME('DY',$HOROLOG) AS DayCnt
以下の埋め込み SQL の例では、ホスト変数として datepart および date-expression で渡します。
SET a="year"
SET b=$HOROLOG
&sql(SELECT DATENAME(:a,:b) INTO :c)
WRITE "this year is: ",c
以下の例では、サブクエリを使用して、Sample.Person から誕生日が Wednesday のレコードが返されるようにします。
SELECT Name AS WednesdaysChild,DOB
FROM (SELECT Name,DOB,DATENAME('dw',DOB) AS Wkday FROM Sample.Person)
WHERE Wkday='Wednesday'
ORDER BY DOB
関連項目
-
SQL 関数 : DATEADD、DATEDIFF、DATEPART、TO_DATE、TIMESTAMPADD、TIMESTAMPDIFF
-
ObjectScript 関数 : $ZDATETIME