SQL Server:DATETIME を操作する便利術 - 最寄りの分と時間に丸め
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