MCPcopy
hub / github.com/django/django / datetime_trunc_sql

Method datetime_trunc_sql

django/db/backends/mysql/operations.py:113–136  ·  view source on GitHub ↗
(self, lookup_type, sql, params, tzname)

Source from the content-addressed store, hash-verified

111 return self.date_extract_sql(lookup_type, sql, params)
112
113 def datetime_trunc_sql(self, lookup_type, sql, params, tzname):
114 sql, params = self._convert_sql_to_tz(sql, params, tzname)
115 fields = ["year", "month", "day", "hour", "minute", "second"]
116 format = ("%Y-", "%m", "-%d", " %H:", "%i", ":%s")
117 format_def = ("0000-", "01", "-01", " 00:", "00", ":00")
118 if lookup_type == "quarter":
119 return (
120 f"CAST(DATE_FORMAT(MAKEDATE(YEAR({sql}), 1) + "
121 f"INTERVAL QUARTER({sql}) QUARTER - "
122 f"INTERVAL 1 QUARTER, %s) AS DATETIME)"
123 ), (*params, *params, "%Y-%m-01 00:00:00")
124 if lookup_type == "week":
125 return (
126 f"CAST(DATE_FORMAT("
127 f"DATE_SUB({sql}, INTERVAL WEEKDAY({sql}) DAY), %s) AS DATETIME)"
128 ), (*params, *params, "%Y-%m-%d 00:00:00")
129 try:
130 i = fields.index(lookup_type) + 1
131 except ValueError:
132 pass
133 else:
134 format_str = "".join(format[:i] + format_def[i:])
135 return f"CAST(DATE_FORMAT({sql}, %s) AS DATETIME)", (*params, format_str)
136 return sql, params
137
138 def time_trunc_sql(self, lookup_type, sql, params, tzname=None):
139 sql, params = self._convert_sql_to_tz(sql, params, tzname)

Callers 2

as_sqlMethod · 0.45

Calls 3

_convert_sql_to_tzMethod · 0.95
indexMethod · 0.45
joinMethod · 0.45

Tested by 1