SQL ServerでT-SQLステートメントを実行する場合は、ODBCスカラー関数を使用できます。 ODBCスカラー関数には、文字列関数、数値関数、システム関数、そしてもちろん日付/時刻関数(日付、時刻、間隔関数とも呼ばれます)など、さまざまな種類があります。
以下は、SQL Serverで使用できる日付、時刻、および間隔関数の例です。
構文
まず、ODBCスカラー関数を呼び出すときに使用する必要のある構文は次のとおりです。
SELECT {fn <function_name> [ (<argument>,....n) ] }
<function_name>
の場所 関数の名前であり、(<argument>,....n)
任意の数のオプションの引数です。
したがって、覚えておくべき主なことは、ODBCスカラー関数を呼び出すときは、関数呼び出しを中括弧({}
)で囲む必要があるということです。 )名前の前にfn
を付けます 。
例1-NOW()
この関数は、現在の日付と時刻をタイムスタンプ値として返します。
SELECT {fn NOW()} AS Result;
結果:
+-------------------------+ | Result | |-------------------------| | 2018-06-13 21:52:25.667 | +-------------------------+
例2–タイムスタンプ、日付、時刻
CURRENT_TIMESTAMP()
関数は、現在のローカル日付とローカル時間をタイムスタンプ値として返します。 CURRENT_DATE()
を使用することもできます 日付部分のみを返す場合、および/またはCURRENT_TIME()
時間部分のみを返します。
SELECT {fn CURRENT_TIMESTAMP()} AS 'Date & Time', {fn CURRENT_DATE()} AS 'Date', {fn CURRENT_TIME()} AS 'Time';
結果:
+-------------------------+------------+--------------+ | Date & Time | Date | Time | |-------------------------+------------+--------------| | 2018-06-13 21:57:29.197 | 2018-06-13 | 21:57:29.197 | +-------------------------+------------+--------------+
また、CURRENT_TIMESTAMP()
およびCURRENT_TIME()
どちらもオプションの引数を受け入れて、戻り値の秒精度を決定します。
例:
SELECT {fn CURRENT_TIMESTAMP(3)} AS 'Date & Time', {fn CURRENT_TIME(6)} AS 'Time';
結果:
+-------------------------+-----------------+ | Date & Time | Time | |-------------------------+-----------------| | 2018-06-13 22:00:59.263 | 22:00:59.263000 | +-------------------------+-----------------+
この例では、CURRENT_TIMESTAMP()
CURRENT_TIME()
の場合、秒の精度は3を返します。 6の秒精度を返します。
例3– CURDATE()およびCURTIME()
CURDATE()
を使用できます および/またはCURTIME()
上記の日付と時刻の関数の代わりとして:
SELECT {fn CURDATE()} AS 'Date', {fn CURTIME()} AS 'Time';
結果:
+------------+--------------+ | Date | Time | |------------+--------------| | 2018-06-13 | 22:05:20.013 | +------------+--------------+
これらの引数は引数を受け入れないため、秒の精度を指定する必要がある場合は、CURRENT_DATE()
を使用してください。 および/またはCURRENT_TIME()
代わりに。
例4–日と週
日付値の特定の部分を返すためのODBCスカラー関数がたくさんあります。これらの関数は、目的の日付部分を抽出する日付式である引数を受け入れます。
日付から日と週の部分を返すためのさまざまな関数は次のとおりです。
DECLARE @date datetime2 = '2000-02-14 07:31:58.1234567'; SELECT {fn DAYNAME(@date)} AS 'DAYNAME', {fn DAYOFYEAR(@date)} AS 'DAYOFYEAR', {fn DAYOFMONTH(@date)} AS 'DAYOFMONTH', {fn DAYOFWEEK(@date)} AS 'DAYOFWEEK', {fn WEEK(@date)} AS 'WEEK';
結果:
+-----------+-------------+--------------+-------------+--------+ | DAYNAME | DAYOFYEAR | DAYOFMONTH | DAYOFWEEK | WEEK | |-----------+-------------+--------------+-------------+--------| | Monday | 45 | 14 | 2 | 8 | +-----------+-------------+--------------+-------------+--------+
この場合、変数に日付を割り当ててから、その変数を各関数に渡しました。次に、関数は該当する日付部分を返しました。
例5–月、四半期、年
日付/時刻の値から月、四半期、および年の部分を返すためのさまざまな関数は次のとおりです。
DECLARE @date datetime2 = '2000-02-14 07:31:58.1234567'; SELECT {fn YEAR(@date)} AS 'YEAR', {fn MONTH(@date)} AS 'MONTH', {fn MONTHNAME(@date)} AS 'MONTHNAME', {fn QUARTER(@date)} AS 'QUARTER';
結果:
+--------+---------+-------------+-----------+ | YEAR | MONTH | MONTHNAME | QUARTER | |--------+---------+-------------+-----------| | 2000 | 2 | February | 1 | +--------+---------+-------------+-----------+
例6–時間、分、秒
日付/時刻の値から時、分、秒の部分を返すためのさまざまな関数は次のとおりです。
DECLARE @date datetime2 = '2000-02-14 07:31:58.1234567'; SELECT {fn HOUR(@date)} AS 'HOUR', {fn MINUTE(@date)} AS 'MINUTE', {fn SECOND(@date)} AS 'SECOND';
結果:
+--------+----------+----------+ | HOUR | MINUTE | SECOND | |--------+----------+----------| | 7 | 31 | 58 | +--------+----------+----------+
例7– EXTRACT()関数
EXTRACT()
と呼ばれるODBCスカラー関数もあります 、これにより、日付/時刻の値からさまざまな日付部分を抽出できます。以下の例。
年、月、日
DECLARE @date datetime2 = '2000-02-14 07:31:58.1234567'; SELECT {fn EXTRACT(YEAR FROM @date)} AS 'YEAR', {fn EXTRACT(MONTH FROM @date)} AS 'MONTH', {fn EXTRACT(DAY FROM @date)} AS 'DAY';
結果:
+--------+---------+-------+ | YEAR | MONTH | DAY | |--------+---------+-------| | 2000 | 2 | 14 | +--------+---------+-------+
時間、分、秒
DECLARE @date datetime2 = '2000-02-14 07:31:58.1234567'; SELECT {fn EXTRACT(HOUR FROM @date)} AS 'HOUR', {fn EXTRACT(MINUTE FROM @date)} AS 'MINUTE', {fn EXTRACT(SECOND FROM @date)} AS 'SECOND';
結果:
+--------+----------+----------+ | HOUR | MINUTE | SECOND | |--------+----------+----------| | 7 | 31 | 58 | +--------+----------+----------+
例8– TIMESTAMPADD()関数
TIMESTAMPADD()
指定された間隔(日付/時刻部分)の指定された数を日付/時刻値に追加できます。この関数は3つの引数を受け入れます。追加する間隔(日付/時刻の部分)(月など)、追加するその部分の数、および日付の値。以下の例。
年、四半期、月、日
DECLARE @date datetime2 = '2000-02-14 07:31:58.1234567'; SELECT {fn TIMESTAMPADD(SQL_TSI_YEAR, 21, @date)} AS 'SQL_TSI_YEAR', {fn TIMESTAMPADD(SQL_TSI_QUARTER, 21, @date)} AS 'SQL_TSI_QUARTER', {fn TIMESTAMPADD(SQL_TSI_MONTH, 21, @date)} AS 'SQL_TSI_MONTH', {fn TIMESTAMPADD(SQL_TSI_DAY, 21, @date)} AS 'SQL_TSI_DAY';
結果:
SQL_TSI_YEAR | 2021-02-14 07:31:58.1234567 SQL_TSI_QUARTER | 2005-05-14 07:31:58.1234567 SQL_TSI_MONTH | 2001-11-14 07:31:58.1234567 SQL_TSI_DAY | 2000-03-06 07:31:58.1234567
時間、分、秒
DECLARE @date datetime2 = '2000-02-14 07:31:58.1234567'; SELECT {fn TIMESTAMPADD(SQL_TSI_HOUR, 5, @date)} AS 'SQL_TSI_HOUR', {fn TIMESTAMPADD(SQL_TSI_MINUTE, 5, @date)} AS 'SQL_TSI_MINUTE', {fn TIMESTAMPADD(SQL_TSI_SECOND, 5, @date)} AS 'SQL_TSI_SECOND', {fn TIMESTAMPADD(SQL_TSI_FRAC_SECOND, 5, @date)} AS 'SQL_TSI_FRAC_SECOND';
結果:
SQL_TSI_HOUR | 2000-02-14 12:31:58.1234567 SQL_TSI_MINUTE | 2000-02-14 07:36:58.1234567 SQL_TSI_SECOND | 2000-02-14 07:32:03.1234567 SQL_TSI_FRAC_SECOND | 2000-02-14 07:31:58.1284567
例9– TIMESTAMPDIFF()関数
TIMESTAMPDIFF()
関数は、2つの日付/時刻値の差を返します。この関数は3つの引数を受け入れます。差(月など)を計算する間隔(日付/時刻部分)、最初の日付、および2番目の日付。この関数は、最初の日付が2番目の日付よりも大きい間隔の数を返します。以下の例。
年、四半期、月、週、日
DECLARE @date1 datetime2 = '2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 = DATEADD(year, 1, @date1); SELECT {fn TIMESTAMPDIFF(SQL_TSI_YEAR, @date1, @date2)} AS 'SQL_TSI_YEAR', {fn TIMESTAMPDIFF(SQL_TSI_QUARTER, @date1, @date2)} AS 'SQL_TSI_QUARTER', {fn TIMESTAMPDIFF(SQL_TSI_MONTH, @date1, @date2)} AS 'SQL_TSI_MONTH', {fn TIMESTAMPDIFF(SQL_TSI_WEEK, @date1, @date2)} AS 'SQL_TSI_WEEK', {fn TIMESTAMPDIFF(SQL_TSI_DAY, @date1, @date2)} AS 'SQL_TSI_DAY';
結果:
+----------------+-------------------+-----------------+----------------+---------------+ | SQL_TSI_YEAR | SQL_TSI_QUARTER | SQL_TSI_MONTH | SQL_TSI_WEEK | SQL_TSI_DAY | |----------------+-------------------+-----------------+----------------+---------------| | 1 | 4 | 12 | 52 | 366 | +----------------+-------------------+-----------------+----------------+---------------+
時間、分、秒
DECLARE @date1 datetime2 = '2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 = DATEADD(day, 1, @date1); SELECT {fn TIMESTAMPDIFF(SQL_TSI_HOUR, @date1, @date2)} AS 'SQL_TSI_HOUR', {fn TIMESTAMPDIFF(SQL_TSI_MINUTE, @date1, @date2)} AS 'SQL_TSI_MINUTE', {fn TIMESTAMPDIFF(SQL_TSI_SECOND, @date1, @date2)} AS 'SQL_TSI_SECOND', {fn TIMESTAMPDIFF(SQL_TSI_FRAC_SECOND, @date1, @date2)} AS 'SQL_TSI_FRAC_SECOND';
結果:
+----------------+------------------+------------------+-----------------------+ | SQL_TSI_HOUR | SQL_TSI_MINUTE | SQL_TSI_SECOND | SQL_TSI_FRAC_SECOND | |----------------+------------------+------------------+-----------------------| | 24 | 1440 | 86400 | 86400000 | +----------------+------------------+------------------+-----------------------+