{"slug":"xetra-trading-hours-and-holidays","qid":"sessions_by_year","label":"Weekdays, weekday closures and Xetra sessions per calendar year","post_title":"Xetra Trading Hours and Holidays 2026–2027","post_url":"/blog/xetra-trading-hours-and-holidays#q-sessions_by_year","columns":["calendar_year","weekdays","weekday_closures","xetra_sessions","weekend_holidays"],"rows":[{"calendar_year":"2026","weekdays":261,"weekday_closures":7,"xetra_sessions":254,"weekend_holidays":1},{"calendar_year":"2027","weekdays":261,"weekday_closures":5,"xetra_sessions":256,"weekend_holidays":3}],"shape":"table","sql":"WITH\n    arrayMap(x -> toDate(x),\n             ['2026-01-01', '2026-04-03', '2026-04-06', '2026-05-01',\n              '2026-12-24', '2026-12-25', '2026-12-26', '2026-12-31',\n              '2027-01-01', '2027-03-26', '2027-03-29', '2027-05-01',\n              '2027-12-24', '2027-12-25', '2027-12-26', '2027-12-31']) AS closures\nSELECT\n    toString(toYear(day))                                      AS calendar_year,\n    countIf(toDayOfWeek(day) <= 5)                             AS weekdays,\n    countIf(toDayOfWeek(day) <= 5 AND has(closures, day))      AS weekday_closures,\n    weekdays - weekday_closures                                AS xetra_sessions,\n    countIf(toDayOfWeek(day) >= 6 AND has(closures, day))      AS weekend_holidays\nFROM\n(\n    SELECT toDate('2026-01-01') + arrayJoin(range(730)) AS day\n)\nGROUP BY calendar_year\nORDER BY calendar_year","computed_at":"2026-09-16T15:25:00.804762+00:00","elapsed":0.115852753}