diff --git a/superset/db_engine_specs/mssql.py b/superset/db_engine_specs/mssql.py index 0572319b2cffd..6db01020fb5b0 100644 --- a/superset/db_engine_specs/mssql.py +++ b/superset/db_engine_specs/mssql.py @@ -50,18 +50,23 @@ class MssqlEngineSpec(BaseEngineSpec): _time_grain_expressions = { None: "{col}", - "PT1S": "DATEADD(second, DATEDIFF(second, '2000-01-01', {col}), '2000-01-01')", - "PT1M": "DATEADD(minute, DATEDIFF(minute, 0, {col}), 0)", - "PT5M": "DATEADD(minute, DATEDIFF(minute, 0, {col}) / 5 * 5, 0)", - "PT10M": "DATEADD(minute, DATEDIFF(minute, 0, {col}) / 10 * 10, 0)", - "PT15M": "DATEADD(minute, DATEDIFF(minute, 0, {col}) / 15 * 15, 0)", - "PT30M": "DATEADD(minute, DATEDIFF(minute, 0, {col}) / 30 * 30, 0)", - "PT1H": "DATEADD(hour, DATEDIFF(hour, 0, {col}), 0)", - "P1D": "DATEADD(day, DATEDIFF(day, 0, {col}), 0)", - "P1W": "DATEADD(week, DATEDIFF(week, 0, {col}), 0)", - "P1M": "DATEADD(month, DATEDIFF(month, 0, {col}), 0)", - "P3M": "DATEADD(quarter, DATEDIFF(quarter, 0, {col}), 0)", - "P1Y": "DATEADD(year, DATEDIFF(year, 0, {col}), 0)", + "PT1S": "DATEADD(SECOND, DATEDIFF(SECOND, '2000-01-01', {col}), '2000-01-01')", + "PT1M": "DATEADD(MINUTE, DATEDIFF(MINUTE, 0, {col}), 0)", + "PT5M": "DATEADD(MINUTE, DATEDIFF(MINUTE, 0, {col}) / 5 * 5, 0)", + "PT10M": "DATEADD(MINUTE, DATEDIFF(MINUTE, 0, {col}) / 10 * 10, 0)", + "PT15M": "DATEADD(MINUTE, DATEDIFF(MINUTE, 0, {col}) / 15 * 15, 0)", + "PT30M": "DATEADD(MINUTE, DATEDIFF(MINUTE, 0, {col}) / 30 * 30, 0)", + "PT1H": "DATEADD(HOUR, DATEDIFF(HOUR, 0, {col}), 0)", + "P1D": "DATEADD(DAY, DATEDIFF(DAY, 0, {col}), 0)", + "P1W": "DATEADD(DAY, 1 - DATEPART(WEEKDAY, {col})," + " DATEADD(DAY, DATEDIFF(DAY, 0, {col}), 0))", + "P1M": "DATEADD(MONTH, DATEDIFF(MONTH, 0, {col}), 0)", + "P3M": "DATEADD(QUARTER, DATEDIFF(QUARTER, 0, {col}), 0)", + "P1Y": "DATEADD(YEAR, DATEDIFF(YEAR, 0, {col}), 0)", + "1969-12-28T00:00:00Z/P1W": "DATEADD(DAY, -1," + " DATEADD(WEEK, DATEDIFF(WEEK, 0, {col}), 0))", + "1969-12-29T00:00:00Z/P1W": "DATEADD(WEEK," + " DATEDIFF(WEEK, 0, DATEADD(DAY, -1, {col})), 0)", } custom_errors: Dict[Pattern[str], Tuple[str, SupersetErrorType, Dict[str, Any]]] = { diff --git a/tests/integration_tests/db_engine_specs/mssql_tests.py b/tests/integration_tests/db_engine_specs/mssql_tests.py index c14515b27c86a..86310b60c13bd 100644 --- a/tests/integration_tests/db_engine_specs/mssql_tests.py +++ b/tests/integration_tests/db_engine_specs/mssql_tests.py @@ -79,7 +79,7 @@ def test_time_exp_mixd_case_col_1y(self): col = column("MixedCase") expr = MssqlEngineSpec.get_timestamp_expr(col, None, "P1Y") result = str(expr.compile(None, dialect=mssql.dialect())) - self.assertEqual(result, "DATEADD(year, DATEDIFF(year, 0, [MixedCase]), 0)") + self.assertEqual(result, "DATEADD(YEAR, DATEDIFF(YEAR, 0, [MixedCase]), 0)") def test_convert_dttm(self): dttm = self.get_dttm()