WEEK_CEIL
Description
The week_ceil function rounds up an input datetime value to the nearest specified week interval start time. If origin is specified, it uses that as the reference; otherwise, it defaults to 0000-01-01 00:00:00.
Date calculation formula:
represents the number of periods needed from the reference time to reach the target time.
Syntax
WEEK_CEIL(`<date_or_time_expr>`)
WEEK_CEIL(`<date_or_time_expr>`, `<origin>`)
WEEK_CEIL(`<date_or_time_expr>`, `<period>`)
WEEK_CEIL(`<date_or_time_expr>`, `<period>`, `<origin>`)
Parameters
Parameter | Description |
---|---|
<date_or_time_expr> | The datetime value to round up, supports date/datetime types. For datetime and date formats, please refer to datetime conversion and date conversion |
<period> | Week interval value, type INT, representing the number of weeks in each interval |
<origin> | Starting point for the interval, supports date/datetime types; defaults to 0000-01-01 00:00:00 |
Return Value
Returns DATETIME type, representing the rounded-up datetime value.
- If
<period>
is a non-positive integer (≤0), the function returns an error; - If any parameter is NULL, returns NULL;
- If
<datetime>
is exactly at an interval start point (based on<period>
and<origin>
), returns that start point; - If input is date type, returns date type
- If input is datetime type, returns datetime type with the same time portion as the origin time.
- If calculation result exceeds maximum datetime 9999-12-31 23:59:59, returns an error.
- If the
<origin>
date and time is after the<period>
, it will still be calculated according to the above formula, but the period k will be negative. - If date_or_time_expr has a scale, the returned result will also have a scale with the fractional part being zero.
Examples
-- 2023-07-13 is Thursday, rounds up to next interval start (1-week interval starts on Monday, so rounds to 2023-07-17 (Monday))
SELECT WEEK_CEIL(cast('2023-07-13 22:28:18' as datetime)) AS result;
+---------------------+
| result |
+---------------------+
| 2023-07-17 00:00:00 |
+---------------------+
-- Specify 2-week interval
SELECT WEEK_CEIL('2023-07-13 22:28:18', 2) AS result;
+---------------------+
| result |
+---------------------+
| 2023-07-24 00:00:00 |
+---------------------+
-- Input date type returns date type, date string returns datetime
SELECT WEEK_CEIL(cast('2023-07-13' as date));
+---------------------------------------+
| WEEK_CEIL(cast('2023-07-13' as date)) |
+---------------------------------------+
| 2023-07-17 |
+---------------------------------------+
--input with decimal part
mysql> SELECT WEEK_CEIL('2023-07-13 22:28:18.123', 2) AS result;
+-------------------------+
| result |
+-------------------------+
| 2023-07-24 00:00:00.000 |
+-------------------------+
-- Specify origin date
SELECT WEEK_CEIL('2023-07-13', 1, '2023-07-03') AS result;
+---------------------+
| result |
+---------------------+
| 2023-07-17 00:00:00 |
+---------------------+
-- Invalid period (non-positive integer)
SELECT WEEK_CEIL('2023-07-13', 0) AS result;
ERROR 1105 (HY000): errCode = 2, detailMessage = (10.16.10.3)[E-218]Operation week_ceil of 2023-07-13 00:00:00, 0 out of range
-- Parameter is NULL
SELECT WEEK_CEIL(NULL, 1) AS result;
+--------+
| result |
+--------+
| NULL |
+--------+