SQL道場 仮想表(DUAL)を使う方法

Oracle、MySQL、SQLServerで関数テストやDBシステム日付のみ取得する時など表(テーブル)にアクセスする必要がないSQLを実行したい時の方法を記載

Oracleの場合

Oracleデータベースの場合は、DUALという仮想表を使用します。

SELECT 関数 FROM DUAL;

SQLでデータベースのシステム日付のみを取得したい場合の例です。

SELECT SYSDATE FROM DUAL;

システム日付(SYSDATE)を取得し、TO_CHAR関数で年月日・時分秒の形式に変換し出力する

SELECT TO_CHAR(SYSDATE,'yyyy/mm/dd hh:mi:ss') "DATE/TIME" FROM DUAL;

システム日付(SYSDATE)を取得し、TO_CHAR関数で年月日・時(24時間表示)の形式に変換し出力する

SELECT TO_CHAR(SYSDATE,'yyyy/mm/dd hh24:mi:ss') "DATE/TIME" FROM DUAL;

システム日付(SYSDATE)を取得し、today(本日)、yesterday(昨日)として1日前、tommorow(明日)として1日後、lastday(末日)としてLAST_DAY関数により月の末日を算出して表示します。

SELECT 
    SYSDATE "today"
    ,SYSDATE -1 "yesterday"
    ,SYSDATE + 1 "tommorow" 
    ,LAST DAY(SYSDATE) "lastday" 
FROM DUAL;

LAST_DAY関数により月の末日を求めて、システム日付との差によって本日から月の末日までの残りの日数を算出しています。

SELECT LAST DAY (SYSDATE) - SYSDATE "月末までの日数" FROM DUAL;

SQL Serverの場合

SQLServerついては、「DUAL」という名前の仮想表がないので、「FROM DUAL」を省略します。

SELECT 関数;

現在の日付と時間を取得する

SELECT CURRENT_TIMESTAMP
現在の日付と時間を取得するサンプル

仮想表を使って、サブクエリの結果を表示する方法

SELECT

(SELECT CT_NAME FROM [SampleDB].[dbo].[MST_CUSTOME] WHERE ID='1') AS ID1_NAME,
(SELECT CT_NAME FROM [SampleDB].[dbo].[MST_CUSTOME] WHERE ID='2') AS ID2_NAME
サブクエリと仮想表のサンプル

MySQLの場合

MySQLについては、「DUAL」という名前の仮想表がないので、「FROM DUAL」を省略します。

仮想表を使用した現在の日付取得

SELECT CURRENT_DATE ;
仮想表を使用して現在の日付取得(MySQL)