Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

DATENAME (SQL)

日付/時刻式の指定された部分の値を表す文字列を返す日付/時刻関数です。

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.Functions.DATENAME(datepart,date-expression)

Datepart 引数

datepart 引数は、以下の日付/時刻コンポーネントの 1 つ (1 つのみ) から成る文字列で、正式な名前 (日付部分列) または省略形 (省略形列) のいずれかになります。これらの datepart コンポーネント名と省略形では、大文字と小文字は区別されません。

日付部分 省略形 返り値
year yyyy, yy 0001-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 桁の精度)
microsecond mcs 0-999999 (6 桁の精度)
nanosecond ns 0-999999999 (9 桁の精度)

リテラルとして無効な datepart 値を指定した場合は、SQLCODE -8 エラー・コードが発行されます。一方、ホスト変数として無効な datepart 値を指定した場合は、SQLCODE エラーは発行されず、DATENAME 関数は NULL 値を返します。

このテーブルに示されている返り値は、それぞれの日付部分の既定値です。これらの日付部分のいくつかの返り値は、各種日付/時刻オプションで SET OPTION コマンドを使用することで変更できます。

week : InterSystems IRIS は、InterSystems IRIS の既定のアルゴリズムと ISO 8601 標準アルゴリズムのいずれかを使用して、特定の日付がその年の何週目にあたるかを判定するように構成できます。詳細は、"WEEK" 関数を参照してください。

weekday : InterSystems IRIS の曜日に関する既定では、日曜日を週の最初の曜日として指定します (weekday=1)。ただし、週の最初の曜日を別の値に構成したり、月曜日を週の最初の曜日として指定する ISO 8601 標準を適用することができます。詳細は、"DAYOFWEEK" 関数を参照してください。

millisecond : InterSystems IRIS は、ミリ秒 (1000 分の 1 秒) 数が含まれる文字列を返します。date-expression に 3 桁より高い精度の小数部がある場合、InterSystems IRIS はそれを 3 桁に切り捨て、この数値を文字列として返します。date-expression が指定された精度であっても、3 桁の小数部の精度よりも低い場合、InterSystems IRIS は 3 桁までゼロでパディングしてから、この数字を文字列として返します。microsecond および nanosecond では、同じ切り捨てとゼロ・パディングが実行されます。

datepart は、引用符付き文字列として、または引用符なしで指定できます。以下のように構文に変化があると、実行される操作も少し異なります。

  • 引用符あり:DATENAME('month','2018/02/25') datepart は、クエリ・キャッシュの作成時にリテラルとして扱われます。InterSystems SQL は、リテラル置換を実行します。これにより、より一般的で再利用可能なクエリ・キャッシュが生成されます。

  • 引用符なし:DATENAME(month,'2018/02/25')datepart は、クエリ・キャッシュの作成時にキーワードとして扱われます。リテラル置換はありません。これにより、より特化したクエリ・キャッシュが生成されます。

日付式の形式

date-expression 引数は、以下のいずれかの形式になります。

  • InterSystems IRIS %Date 論理値 (+$H)

  • InterSystems IRIS %PosixTime (%Library.PosixTimeOpens in a new tab) 論理値 (エンコードされた 64 ビットの符号付き整数)

  • InterSystems IRIS %TimeStamp (%Library.TimeStampOpens in a new tab) 論理値 (YYYY-MM-DD HH:MM:SS.FFF)。ODBC 形式とも呼ばれます。

  • InterSystems IRIS %String (互換性のある) 値

InterSystems IRIS %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 桁で表示される場合、InterSystems IRIS はスライディング・ウィンドウを確認して日付を解釈します。スライディング・ウィンドウのシステム既定値は、%DATE ユーティリティで設定できます。これについては、https://docs.intersystems.com/priordocexcerptsOpens in a new tab にある旧ドキュメントに記載されています。現在のプロセスのスライディング・ウィンドウの設定の詳細は、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 つの区切り文字 (:) があることが必要です。

  • 日付/時刻値は、有効な範囲内にある必要があります。年は 0001 から 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','2018-02-21') AS DayName,
       DATENAME(dw,'02/21/2018') AS DayName,
       DATENAME('DW',64700) AS DayName

以下の例は、指定された日付の月名 ('mm') である 'December' を返します。

SELECT DATENAME('mm','2018-12-20 12:00:00') AS MonthName

以下の例は、指定された日付の年名 (yy) である 2018 (文字列) を返します。

SELECT DATENAME('yy','2018-12-20 12:00:00') AS Year

上記の例は、日付部分に省略形を使用していることに注意してください。ただし、以下の例のように、正式な名前を指定することもできます。

SELECT DATENAME('year','2018-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

関連項目

FeedbackOpens in a new tab