SQL Server:DATETIME を操作する便利術 - 最寄りの分と時間に丸め

2024-05-23

SQL Server で T-SQL 日時を最寄りの分と時間に丸める方法

FLOOR および CEILING 関数を使用する

FLOOR関数は、指定した値を 小数点以下を切り捨てた最大の整数 に丸めます。一方、CEILING関数は、指定した値を 小数点以下を切り上げた最大の整数 に丸めます。

-- 最寄りの分に丸める
SELECT
  FLOOR(CONVERT(DATETIME, '2024-05-23 10:23:56', 120)) AS '最寄りの分',
  CONVERT(VARCHAR(10), FLOOR(CONVERT(DATETIME, '2024-05-23 10:23:56', 120)), 108) AS 'フォーマット済み最寄りの分'

-- 最寄りの時間に丸める
SELECT
  CEILING(CONVERT(DATETIME, '2024-05-23 10:23:56', 120)) AS '最寄りの時間',
  CONVERT(VARCHAR(10), CEILING(CONVERT(DATETIME, '2024-05-23 10:23:56', 120)), 108) AS 'フォーマット済み最寄りの時間'

DATEADD および DATEPART 関数を使用する

DATEADD関数は、指定した日時から 指定された間隔を加算または減算 した日時を返します。DATEPART関数は、指定した日時から 特定の日付コンポーネント (年、月、日、時、分、秒など) を抽出します。

-- 最寄りの分に丸める
SELECT
  DATEADD(MINUTE, FLOOR(DATEPART(MINUTE, '2024-05-23 10:23:56')), '2024-05-23 10:23:56') AS '最寄りの分',
  CONVERT(VARCHAR(10), DATEADD(MINUTE, FLOOR(DATEPART(MINUTE, '2024-05-23 10:23:56')), '2024-05-23 10:23:56'), 108) AS 'フォーマット済み最寄りの分'

-- 最寄りの時間に丸める
SELECT
  DATEADD(HOUR, FLOOR(DATEPART(HOUR, '2024-05-23 10:23:56')), '2024-05-23 10:23:56') AS '最寄りの時間',
  CONVERT(VARCHAR(10), DATEADD(HOUR, FLOOR(DATEPART(HOUR, '2024-05-23 10:23:56')), '2024-05-23 10:23:56'), 108) AS 'フォーマット済み最寄りの時間'

CAST および CONVERT 関数を使用する

CAST関数は、あるデータ型を別のデータ型に変換します。CONVERT関数は、文字列を日時型に変換したり、日時型を文字列に変換したりすることができます。

-- 最寄りの分に丸める
SELECT
  CAST(FLOOR(CONVERT(DECIMAL(10, 2), '2024-05-23 10:23:56', 120)) * 60 AS INT) AS '最寄りの分',
  CONVERT(VARCHAR(10), CAST(FLOOR(CONVERT(DECIMAL(10, 2), '2024-05-23 10:23:56', 120)) * 60 AS INT), 108) AS 'フォーマット済み最寄りの分'

-- 最寄りの時間に丸める
SELECT
  CAST(FLOOR(CONVERT(DECIMAL(10, 0), '2024-05-23 10:23:56', 120)) AS INT) AS '最寄りの時間',
  CONVERT(VARCHAR(10), CAST(FLOOR(CONVERT(DECIMAL(10, 0), '2024-05-



FLOOR および CEILING 関数を使用する

-- サンプルデータ
DECLARE @dateTime DATETIME = '2024-05-23 10:23:56';

-- 最寄りの分に丸める
SELECT
  FLOOR(CONVERT(@dateTime, 120)) AS '最寄りの分',
  CONVERT(VARCHAR(10), FLOOR(CONVERT(@dateTime, 120)), 108) AS 'フォーマット済み最寄りの分'

-- 最寄りの時間に丸める
SELECT
  CEILING(CONVERT(@dateTime, 120)) AS '最寄りの時間',
  CONVERT(VARCHAR(10), CEILING(CONVERT(@dateTime, 120)), 108) AS 'フォーマット済み最寄りの時間'

出力:

最寄りの分       フォーマット済み最寄りの分
-------------------------------
2024-05-23 10:24:00 2024-05-23 10:24:00
最寄りの時間       フォーマット済み最寄りの時間
-------------------------------
2024-05-23 11:00:00 2024-05-23 11:00:00

DATEADD および DATEPART 関数を使用する

-- サンプルデータ
DECLARE @dateTime DATETIME = '2024-05-23 10:23:56';

-- 最寄りの分に丸める
SELECT
  DATEADD(MINUTE, FLOOR(DATEPART(MINUTE, @dateTime)), @dateTime) AS '最寄りの分',
  CONVERT(VARCHAR(10), DATEADD(MINUTE, FLOOR(DATEPART(MINUTE, @dateTime)), @dateTime), 108) AS 'フォーマット済み最寄りの分'

-- 最寄りの時間に丸める
SELECT
  DATEADD(HOUR, FLOOR(DATEPART(HOUR, @dateTime)), @dateTime) AS '最寄りの時間',
  CONVERT(VARCHAR(10), DATEADD(HOUR, FLOOR(DATEPART(HOUR, @dateTime)), @dateTime), 108) AS 'フォーマット済み最寄りの時間'
最寄りの分       フォーマット済み最寄りの分
-------------------------------
2024-05-23 10:24:00 2024-05-23 10:24:00
最寄りの時間       フォーマット済み最寄りの時間
-------------------------------
2024-05-23 11:00:00 2024-05-23 11:00:00

CAST および CONVERT 関数を使用する

-- サンプルデータ
DECLARE @dateTime DATETIME = '2024-05-23 10:23:56';

-- 最寄りの分に丸める
SELECT
  CAST(FLOOR(CONVERT(DECIMAL(10, 2), @dateTime, 120)) * 60 AS INT) AS '最寄りの分',
  CONVERT(VARCHAR(10), CAST(FLOOR(CONVERT(DECIMAL(10, 2), @dateTime, 120)) * 60 AS INT), 108) AS 'フォーマット済み最寄りの分'

-- 最寄りの時間に丸める
SELECT
  CAST(FLOOR(CONVERT(DECIMAL(10, 0), @dateTime, 120)) AS INT) AS '最寄りの時間',
  CONVERT(VARCHAR(10), CAST(FLOOR(CONVERT(DECIMAL(10, 0), @dateTime, 120)) AS INT), 108) AS 'フォーマット済み最寄りの時間'
最寄りの分       フォーマット済み最寄りの分
-------------------------------
2024-05-23 10:24:00 2024-05-23 10:24:00
最寄りの時間       フォーマット済み最寄りの時間
-------------------------------
2024-05-23 11:00:00 2024-05-23 11



SQL Server で T-SQL 日時を最寄りの分と時間に丸めるその他の方法

SWEEP 関数を使用する

SWEEP関数は、指定した値を 指定した間隔に丸め た値を返します。

-- 最寄りの分に丸める
SELECT
  SWEEP(CONVERT(DATETIME, '2024-05-23 10:23:56', 120), 1) AS '最寄りの分',
  CONVERT(VARCHAR(10), SWEEP(CONVERT(DATETIME, '2024-05-23 10:23:56', 120), 1), 108) AS 'フォーマット済み最寄りの分'

-- 最寄りの時間に丸める
SELECT
  SWEEP(CONVERT(DATETIME, '2024-05-23 10:23:56', 120), 60) AS '最寄りの時間',
  CONVERT(VARCHAR(10), SWEEP(CONVERT(DATETIME, '2024-05-23 10:23:56', 120), 60), 108) AS 'フォーマット済み最寄りの時間'

NUMERIC 型と DATETIME 型のキャストを使用する

NUMERIC型は、固定小数点数の値を格納するために使用されます。DATETIME型は、日時値を格納するために使用されます。

-- 最寄りの分に丸める
SELECT
  CAST(ROUND(CONVERT(NUMERIC(10, 2), '2024-05-23 10:23:56', 120) * 60, 0) / 60 AS DATETIME) AS '最寄りの分',
  CONVERT(VARCHAR(10), CAST(ROUND(CONVERT(NUMERIC(10, 2), '2024-05-23 10:23:56', 120) * 60, 0) / 60 AS DATETIME), 108) AS 'フォーマット済み最寄りの分'

-- 最寄りの時間に丸める
SELECT
  CAST(ROUND(CONVERT(NUMERIC(10, 0), '2024-05-23 10:23:56', 120), 0) AS DATETIME) AS '最寄りの時間',
  CONVERT(VARCHAR(10), CAST(ROUND(CONVERT(NUMERIC(10, 0), '2024-05-23 10:23:56', 120), 0) AS DATETIME), 108) AS 'フォーマット済み最寄りの時間'

CASE 式を使用する

CASE式は、条件に応じてさまざまな値を返すために使用されます。

-- 最寄りの分に丸める
SELECT
  CASE
    WHEN DATEPART(MINUTE, '2024-05-23 10:23:56') >= 30 THEN
      DATEADD(MINUTE, 30, '2024-05-23 10:23:56')
    ELSE
      DATEADD(MINUTE, -30, '2024-05-23 10:23:56')
  END AS '最寄りの分',
  CONVERT(VARCHAR(10), CASE
    WHEN DATEPART(MINUTE, '2024-05-23 10:23:56') >= 30 THEN
      DATEADD(MINUTE, 30, '2024-05-23 10:23:56')
    ELSE
      DATEADD(MINUTE, -30, '2024-05-23 10:23:56')
  END, 108) AS 'フォーマット済み最寄りの分'

-- 最寄りの時間に丸める
SELECT
  CASE
    WHEN DATEPART(HOUR, '2024-05-23 10:23:56') >= 12 THEN
      DATEADD(HOUR, 12, '2024

sql sql-server t-sql


SUBSTRING() 関数とLEN() 関数でバイナリ値を16進数に変換する方法

CONVERT() 関数は、データ型を変換するために使用できます。 バイナリ値を16進数に変換するには、次のような構文を使用します。binary_value: 変換するバイナリ値SQL_VARIANT: 変換後のデータ型。この場合は、SQL_VARIANT を指定します。...


Reporting Services で単一のパラメーターに複数の値を渡す - 区切り文字付きの文字列

このチュートリアルでは、Reporting Services で単一のパラメーターに複数の値を渡すための 3 つの方法を紹介します。方法 1: 区切り文字付きの文字列最も簡単な方法は、複数の値を区切り文字で連結した文字列をパラメーターとして渡す方法です。例えば、カンマ区切りの文字列であれば、以下のようにパラメーターを設定できます。...


Doctrine 2: UPDATE クエリ作成のベストプラクティス - Query Builder vs DQL vs ネイティブ SQL vs EntityManager

このチュートリアルを始める前に、以下の前提条件を満たしていることを確認してください。PHP 7.4 以上ComposerDoctrine 2エンティティを定義するまず、データベースのテーブルに対応するエンティティクラスを定義する必要があります。例えば、Product エンティティクラスを次のように定義できます。...


SQLにおけるデータ分析をマスターするための必須スキル:2つのSELECTステートメント結果の結合

SQLにおいて、複数のSELECTステートメントの結果を結合することは、様々なデータ分析やレポート作成において重要です。結合には、主に以下の3種類があります。INNER JOIN: 一致する行のみを結合します。最も一般的な結合方法です。LEFT JOIN: 左側のテーブルのすべての行と、右側のテーブルで一致する行を結合します。右側テーブルで一致しない行は、NULL値として扱われます。...


5つの方法で解説!SQL Serverで一時テーブルにデータを挿入する

最も一般的な方法は、INSERT INTO ステートメントを使用することです。上記のように、INSERT INTO ステートメントで一時テーブル名を指定し、列名と値のペアを指定してデータを挿入できます。SELECT INTO ステートメントを使用すると、別のテーブルからデータをコピーして一時テーブルを作成できます。...


SQL SQL SQL SQL Amazon で見る



DATEPART 関数を使用して SQL Server 2005 で DateTime 型から時間を抽出する

SQL Server 2005 で DateTime 型の列から時間を抽出するには、いくつかの方法があります。ここでは、最も一般的で便利な 2 つの方法をご紹介します。方法 1: CONVERT 関数を使用するCONVERT 関数を使用して、DateTime 型の値を別のデータ型に変換することができます。時間を抽出するには、DateTime 型の値を TIME 型に変換します。