@@ -2416,6 +2416,45 @@ def test_timestamps(self):
24162416 "DATEDIFF(DAY, CAST('2007-12-25' AS DATE), CAST('2008-12-25' AS DATE))" ,
24172417 )
24182418
2419+ # Test DATEDIFF with WEEK unit - week boundary crossing
2420+ self .validate_all (
2421+ "DATEDIFF(WEEK, '2024-12-13', '2024-12-17')" ,
2422+ write = {
2423+ "duckdb" : "DATE_DIFF('WEEK', DATE_TRUNC('WEEK', CAST('2024-12-13' AS DATE)), DATE_TRUNC('WEEK', CAST('2024-12-17' AS DATE)))" ,
2424+ "snowflake" : "DATEDIFF(WEEK, '2024-12-13', '2024-12-17')" ,
2425+ },
2426+ )
2427+ self .validate_all (
2428+ "DATEDIFF(WEEK, '2024-12-15', '2024-12-16')" ,
2429+ write = {
2430+ "duckdb" : "DATE_DIFF('WEEK', DATE_TRUNC('WEEK', CAST('2024-12-15' AS DATE)), DATE_TRUNC('WEEK', CAST('2024-12-16' AS DATE)))" ,
2431+ "snowflake" : "DATEDIFF(WEEK, '2024-12-15', '2024-12-16')" ,
2432+ },
2433+ )
2434+
2435+ # Test DATEDIFF with other date parts - should not use DATE_TRUNC
2436+ self .validate_all (
2437+ "DATEDIFF(YEAR, '2020-01-15', '2023-06-20')" ,
2438+ write = {
2439+ "duckdb" : "DATE_DIFF('YEAR', CAST('2020-01-15' AS DATE), CAST('2023-06-20' AS DATE))" ,
2440+ "snowflake" : "DATEDIFF(YEAR, '2020-01-15', '2023-06-20')" ,
2441+ },
2442+ )
2443+ self .validate_all (
2444+ "DATEDIFF(MONTH, '2020-01-15', '2023-06-20')" ,
2445+ write = {
2446+ "duckdb" : "DATE_DIFF('MONTH', CAST('2020-01-15' AS DATE), CAST('2023-06-20' AS DATE))" ,
2447+ "snowflake" : "DATEDIFF(MONTH, '2020-01-15', '2023-06-20')" ,
2448+ },
2449+ )
2450+ self .validate_all (
2451+ "DATEDIFF(QUARTER, '2020-01-15', '2023-06-20')" ,
2452+ write = {
2453+ "duckdb" : "DATE_DIFF('QUARTER', CAST('2020-01-15' AS DATE), CAST('2023-06-20' AS DATE))" ,
2454+ "snowflake" : "DATEDIFF(QUARTER, '2020-01-15', '2023-06-20')" ,
2455+ },
2456+ )
2457+
24192458 self .validate_identity ("DATEADD(y, 5, x)" , "DATEADD(YEAR, 5, x)" )
24202459 self .validate_identity ("DATEADD(y, 5, x)" , "DATEADD(YEAR, 5, x)" )
24212460 self .validate_identity ("DATE_PART(yyy, x)" , "DATE_PART(YEAR, x)" )
0 commit comments