- 演算子 - 減算する -

SQL-92/99   Oracle DB2 SQL Server MySQL PostgreSQL Access

数値式1 - 数値式2
日付式1 - 日付式2
日付式 - 数値式

 - 演算子は、数値データを引き算するときに使用します

-- 【説明】
-- 次の SQL 文は、「SALE」列から「POINT」列を減算したデータを取得します。

SELECT C_ID, SALE - POINT FROM T_11_1


C_IDSALE - POINT
90010110800
90010211700
900103 4500
900104 4887
900105 4950

 Oracle / PostgreSQL では、- 演算子を使用して日付データを引き算することができます。

-- 【説明】
-- 次の SQL 文は、現在の日付から「UPDATE_TIME」列の日付で減算したデータを取得します。

SELECT C_ID, CURRENT_DATE, UPDATE_TIME, CURRENT_DATE - UPDATE_TIME AS DIFF_DATE FROM T_11_1;


C_IDCURRENT_DATEUPDATE_TIMEDIFF_DATE
90010106-06-1406-06-0113
90010206-06-1406-06-0212
90010306-06-1406-06-0113
90010406-06-1406-06-07 7
90010506-06-1406-06-05 9

 Oracle / SQL Server では、- 演算子を使用して日付データと数値データを引き算することができます。 ただし、数値データは日数として扱われるため、月単位の引き算を行う場合には、月の日数を計算する必要があります。 なお、Oracle / SQL Server で月単位の計算を行う場合には、ADD_MONTHS 関数(Oracle)や DATEADD 関数(SQL Server)を使用します。

-- 【説明】
-- 次の SQL 文は、現在の日付から「10」日を減算します。

-- Oracle

SELECT CURRENT_DATE, CURRENT_DATE - 10 FROM DUAL;


CURRENT_DATECURRENT_DATE - 10
06-06-1406-06-04

-- SQL Server

SELECT GETDATE(), GETDATE() + 10;


GETDATE()GETDATE() - 10
2006-06-04 10:11:50.5002006-06-04 10:11:50.500

 MySQL / PostgreSQL では、- 演算子を使用して日付データと数値データを引き算することができます。 ただし、数値データには INTERVAL キーワードの指定、さらに数値と日付タイプを指定する必要があります。 なお、PostgreSQL では、日付データとして認識させるため、DATE 関数を使用するほか、数値と日付タイプは、「'(シングルクォーテーション)」で括る必要があります。

-- 【説明】
-- 次の SQL 文は、日付の「2006-06-01」から「1」カ月を減算します。

-- MySQL

SELECT '2006-06-01' - INTERVAL 1 MONTH AS PREV_1MONTH;


PREV_1MONTH
2006-05-01

-- PostgreSQL

SELECT DATE('2006-06-01') + INTERVAL '1 MONTH' AS PREV_1MONTH;


PREV_1MONTH
2006-05-01 00:00:00

参考表

T_11_1

C_IDSALERATEPOINTUPDATE_TIME
9001011200010.00120006-06-01
9001021300010.00130006-06-02
900103 500010.00 50006-06-01
900104 543010.00 54306-06-07
900105 550010.00 55006-06-05