Funzioni di data e ora in query di aggregazione
Salve a tutti,
oggi mi è capitata per sbaglio una cosa che non mi aspettavo. In una semplice query di aggregazione mi ero dimenticato di eliminare un campo con la funzione GETDATE() tra quelli presenti nella SELECT:
SELECT
SOD.SalesOrderID
, SUM(SOD.LineTotal) AS LineTotal
, GETDATE() AS MyDate --< non contenuta nel group by
FROM Sales.SalesOrderDetail AS SOD
GROUP BY SOD.SalesOrderID;
Essendo il GETDATE non definito all'interno del GROUP BY, mi sarei aspettato che l'esecuzione della query restituisse un errore. E invece, quasi per magia
, mi vedo restituire il resultset correttamente:

Ho poi verificato che la query funziona correttamente con tutte le funzioni di data e ora:
- SYSDATETIME()
- SYSDATETIMEOFFSET()
- SYSUTCDATETIME()
- CURRENT_TIMESTAMP
- GETUTCDATE()
Effettivamente, i valori restituiti da tali funzioni vengono visti come costanti, dunque le funzioni che li generano vanno omesse dalla clausula GROUP BY.
Se si volesse include la funzione in oggetto nella clausula GROUP BY, si otterrebbe un errore:

Lezione di oggi: non si finisce mai di imparare!! 