diff options
author | Mads Jensen <mje@inducks.org> | 2017-06-08 21:15:29 +0200 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2017-06-08 15:15:29 -0400 |
commit | c7f6ffbdcf9ca8df905aebf73336ef9905771f7c (patch) | |
tree | 002de0322ce05e2ead82fcf01265377f4ddf9065 /django/db/backends/mysql/operations.py | |
parent | f6bd00131e687aedf2719ad31e84b097562ca5f2 (diff) | |
download | django-c7f6ffbdcf9ca8df905aebf73336ef9905771f7c.tar.gz |
Fixed #28103 -- Added quarter extract, truncation, and lookup.
Thanks Mariusz Felisiak, Tim Graham, and Adam Johnson for review.
Diffstat (limited to 'django/db/backends/mysql/operations.py')
-rw-r--r-- | django/db/backends/mysql/operations.py | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/django/db/backends/mysql/operations.py b/django/db/backends/mysql/operations.py index c1d0451a54..584eb56e70 100644 --- a/django/db/backends/mysql/operations.py +++ b/django/db/backends/mysql/operations.py @@ -39,6 +39,10 @@ class DatabaseOperations(BaseDatabaseOperations): if lookup_type in fields: format_str = fields[lookup_type] return "CAST(DATE_FORMAT(%s, '%s') AS DATE)" % (field_name, format_str) + elif lookup_type == 'quarter': + return "MAKEDATE(YEAR(%s), 1) + INTERVAL QUARTER(%s) QUARTER - INTERVAL 1 QUARTER" % ( + field_name, field_name + ) else: return "DATE(%s)" % (field_name) @@ -64,6 +68,12 @@ class DatabaseOperations(BaseDatabaseOperations): fields = ['year', 'month', 'day', 'hour', 'minute', 'second'] format = ('%%Y-', '%%m', '-%%d', ' %%H:', '%%i', ':%%s') # Use double percents to escape. format_def = ('0000-', '01', '-01', ' 00:', '00', ':00') + if lookup_type == 'quarter': + return ( + "CAST(DATE_FORMAT(MAKEDATE(YEAR({field_name}), 1) + " + "INTERVAL QUARTER({field_name}) QUARTER - " + + "INTERVAL 1 QUARTER, '%%Y-%%m-01 00:00:00') AS DATETIME)" + ).format(field_name=field_name) try: i = fields.index(lookup_type) + 1 except ValueError: |