Skip to content

Conversation

@zclllyybb
Copy link
Contributor

pick #37376 and #37766

…apache#37376)

Issue Number: close #xxx

Java doesn't support the calculation of `0000-01-01`(0000 year is 1 B.C.
which ISO-8601 defines). so some of our calc was wrong in FE. now fixed
them.

new result:
```sql
mysql> select week('0000-01-01', 0),week('0000-01-01', 1),week('0000-01-01', 2),week('0000-01-01', 3),week('0000-01-01', 4), week('0000-01-01', 5), week('0000-01-01', 6), week('0000-01-01', 7);
+------+------+------+------+------+------+------+------+
| 1    | 0    | 1    | 52   | 1    | 0    | 1    | 52   |
+------+------+------+------+------+------+------+------+
|    1 |    0 |    1 |   52 |    1 |    0 |    1 |   52 |
+------+------+------+------+------+------+------+------+
1 row in set (0.10 sec)

mysql> select week('0000-01-02', 0),week('0000-01-02', 1),week('0000-01-02', 2),week('0000-01-02', 3),week('0000-01-02', 4), week('0000-01-02', 5), week('0000-01-02', 6), week('0000-01-02', 7);
+------+------+------+------+------+------+------+------+
| 1    | 1    | 1    | 1    | 1    | 1    | 1    | 1    |
+------+------+------+------+------+------+------+------+
|    1 |    1 |    1 |    1 |    1 |    1 |    1 |    1 |
+------+------+------+------+------+------+------+------+
1 row in set (0.10 sec)
```
same with `yearweek`
…pache#37766)

make `dayofyear`, `dayofweek`, `weekofyear` result of FE folding
constant result same with MySQL. mainly about date in BC01 (year `0000`)

before:
```sql
mysql> select DAYOFWEEK('0000-01-01'),DAYOFWEEK('0000-01-02'),DAYOFWEEK('0000-01-03'),DAYOFWEEK('0000-01-04'),DAYOFWEEK('0000-01-05'),DAYOFWEEK('0000-01-06'),DAYOFWEEK('0000-01-07'),DAYOFWEEK('0000-01-08');
+------+------+------+------+------+------+------+------+
| 7    | 1    | 2    | 3    | 4    | 5    | 6    | 7    |
+------+------+------+------+------+------+------+------+
|    7 |    1 |    2 |    3 |    4 |    5 |    6 |    7 |
+------+------+------+------+------+------+------+------+

mysql> select DAYOFYEAR('0000-02-27'),DAYOFYEAR('0000-02-28'),DAYOFYEAR('0000-03-01'),DAYOFYEAR('0000-03-02');
+------+------+------+------+
| 58   | 59   | 61   | 62   |
+------+------+------+------+
|   58 |   59 |   61 |   62 |
+------+------+------+------+

mysql> select WEEKOFYEAR('0000-01-01'),WEEKOFYEAR('0000-01-02'),WEEKOFYEAR('0000-01-03'),WEEKOFYEAR('0000-01-04'),WEEKOFYEAR('0000-01-05'),WEEKOFYEAR('0000-01-06'),WEEKOFYEAR('0000-01-07'),WEEKOFYEAR('0000-01-08');
+------+------+------+------+------+------+------+------+
| 52   | 52   | 1    | 1    | 1    | 1    | 1    | 1    |
+------+------+------+------+------+------+------+------+
|   52 |   52 |    1 |    1 |    1 |    1 |    1 |    1 |
+------+------+------+------+------+------+------+------+

mysql> select WEEKOFYEAR('0000-02-25'),WEEKOFYEAR('0000-02-26'),WEEKOFYEAR('0000-02-27'),WEEKOFYEAR('0000-02-28'),WEEKOFYEAR('0000-03-01'),WEEKOFYEAR('0000-03-02'),WEEKOFYEAR('2022-03-03');
+------+------+------+------+------+------+------+
| 8    | 8    | 8    | 9    | 9    | 9    | 9    |
+------+------+------+------+------+------+------+
|    8 |    8 |    8 |    9 |    9 |    9 |    9 |
+------+------+------+------+------+------+------+
```

after:
```sql
mysql> select DAYOFWEEK('0000-01-01'),DAYOFWEEK('0000-01-02'),DAYOFWEEK('0000-01-03'),DAYOFWEEK('0000-01-04'),DAYOFWEEK('0000-01-05'),DAYOFWEEK('0000-01-06'),DAYOFWEEK('0000-01-07'),DAYOFWEEK('0000-01-08');
+------+------+------+------+------+------+------+------+
| 1    | 2    | 3    | 4    | 5    | 6    | 7    | 1    |
+------+------+------+------+------+------+------+------+
|    1 |    2 |    3 |    4 |    5 |    6 |    7 |    1 |
+------+------+------+------+------+------+------+------+

mysql> select DAYOFYEAR('0000-02-27'),DAYOFYEAR('0000-02-28'),DAYOFYEAR('0000-03-01'),DAYOFYEAR('0000-03-02');
+------+------+------+------+
| 58   | 59   | 60   | 61   |
+------+------+------+------+
|   58 |   59 |   60 |   61 |
+------+------+------+------+

mysql> select WEEKOFYEAR('0000-01-01'),WEEKOFYEAR('0000-01-02'),WEEKOFYEAR('0000-01-03'),WEEKOFYEAR('0000-01-04'),WEEKOFYEAR('0000-01-05'),WEEKOFYEAR('0000-01-06'),WEEKOFYEAR('0000-01-07'),WEEKOFYEAR('0000-01-08');
+------+------+------+------+------+------+------+------+
| 52   | 1    | 1    | 1    | 1    | 1    | 1    | 1    |
+------+------+------+------+------+------+------+------+
|   52 |    1 |    1 |    1 |    1 |    1 |    1 |    1 |
+------+------+------+------+------+------+------+------+

mysql> select WEEKOFYEAR('0000-02-25'),WEEKOFYEAR('0000-02-26'),WEEKOFYEAR('0000-02-27'),WEEKOFYEAR('0000-02-28'),WEEKOFYEAR('0000-03-01'),WEEKOFYEAR('0000-03-02'),WEEKOFYEAR('2022-03-03');
+------+------+------+------+------+------+------+
| 8    | 8    | 9    | 9    | 9    | 9    | 9    |
+------+------+------+------+------+------+------+
|    8 |    8 |    9 |    9 |    9 |    9 |    9 |
+------+------+------+------+------+------+------+
```
@zclllyybb
Copy link
Contributor Author

run buildall

@Thearas
Copy link
Contributor

Thearas commented Feb 7, 2025

Thank you for your contribution to Apache Doris.
Don't know what should be done next? See How to process your PR.

Please clearly describe your PR:

  1. What problem was fixed (it's best to include specific error reporting information). How it was fixed.
  2. Which behaviors were modified. What was the previous behavior, what is it now, why was it modified, and what possible impacts might there be.
  3. What features were added. Why was this function added?
  4. Which code was refactored and why was this part of the code refactored?
  5. Which functions were optimized and what is the difference before and after the optimization?

@yiguolei yiguolei merged commit 800288b into apache:branch-2.1 Feb 8, 2025
19 of 20 checks passed
@zclllyybb zclllyybb deleted the pick_21_fe_dates branch February 13, 2025 17:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants