レポート用の日付書式設定

SQL Serverで学ぶ時系列分析

Maham Faisal Khan

Senior Data Science Content Developer

書式設定関数

CAST()

CONVERT()

FORMAT()

SQL Serverで学ぶ時系列分析

CAST() 関数

  • 少なくとも SQL Server 2000 以降でサポート
  • データ型間の変換(日時型を含む)を実行
  • 日付→文字列の書式制御は不可
  • ANSI SQL 準拠。多くのリレーショナル/非リレーショナル DB で利用可
SQL Serverで学ぶ時系列分析

CAST() の使用

DECLARE
    @SomeDate DATETIME2(3) = '1991-06-04 08:00:09',
    @SomeString NVARCHAR(30) = '1991-06-04 08:00:09',
    @OldDateTime DATETIME = '1991-06-04 08:00:09';
SELECT
    CAST(@SomeDate AS NVARCHAR(30)) AS DateToString,
    CAST(@SomeString AS DATETIME2(3)) AS StringToDate,
    CAST(@OldDateTime AS NVARCHAR(30)) AS OldDateToString;
DateToString StringToDate OldDateToString
1991-06-04 08:00:09.000 1991-06-04 08:00:09.000 Jun 4 1991 8:00AM
SQL Serverで学ぶ時系列分析

CONVERT() 関数

  • 少なくとも SQL Server 2000 以降でサポート
  • データ型を別の型に変換(日時型を含む)
  • スタイル引数で日付→文字列の一部書式制御が可能
  • T-SQL 固有
SQL Serverで学ぶ時系列分析

CONVERT() の使用

DECLARE
    @SomeDate DATETIME2(3) = '1793-02-21 11:13:19.033';
SELECT
    CONVERT(NVARCHAR(30), @SomeDate, 0) AS DefaultForm,
    CONVERT(NVARCHAR(30), @SomeDate, 1) AS US_mdy,
    CONVERT(NVARCHAR(30), @SomeDate, 101) AS US_mdyyyy,
    CONVERT(NVARCHAR(30), @SomeDate, 120) AS ODBC_sec;
GO
DefaultForm US_mdy US_mdyyyy ODBC_sec
Feb 21 1793 11:13 AM 02/21/93 02/21/1793 1793-02-21 11:13:19
SQL Serverで学ぶ時系列分析

CONVERT() のスタイル例

スタイルコード

  • 1 / 101
  • 3 / 103
  • 4 / 104
  • 11 / 111
  • 12 / 112
  • 20 / 120
  • 126
  • 127

形式

  • 米国 m/d/y
  • 英国/フランス d/m/y
  • ドイツ d.m.y
  • 日本 y/m/d
  • ISO 標準 yyyymmdd
  • ODBC 標準(ms は 121)
  • ISO8601 yyyy-mm-dd hh:mi:ss.mmm
  • yyyy-mm-ddThh:mi:ss.mmmZ
SQL Serverで学ぶ時系列分析

FORMAT() 関数

  • SQL Server 2012 以降でサポート
  • レポート向けに日付や数値を特定の書式に整形可能
  • 日付→文字列の書式指定は CAST()CONVERT() より柔軟
  • T-SQL 固有
  • 変換に .NET フレームワークを使用
  • 行数が増えると遅くなる場合あり
SQL Serverで学ぶ時系列分析

FORMAT() の使用

DECLARE
    @SomeDate DATETIME2(3) = '1793-02-21 11:13:19.033';
SELECT
    FORMAT(@SomeDate, 'd', 'en-US') AS US_d,
    FORMAT(@SomeDate, 'd', 'de-DE') AS DE_d,
    FORMAT(@SomeDate, 'D', 'de-DE') AS DE_D,
    FORMAT(@SomeDate, 'yyyy-MM-dd') AS yMd;
US_d DE_d DE_D yMd
2/21/1793 21.02.1793 Donnerstag, 21. February 1793 1793-02-21
SQL Serverで学ぶ時系列分析

大規模データでは、FORMAT() は CAST() や CONVERT() より遅くなることがあります。

SQL Serverで学ぶ時系列分析

練習しましょう!

SQL Serverで学ぶ時系列分析

Preparing Video For Download...