Site Meter Funzioni di data e ora in query di aggregazione - The SQL Server Side of Me

The SQL Server Side of Me

Blog di Luca Zavarella. Libero sfogo alle mie curiosità su SQL Server

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 Smile, mi vedo restituire il resultset correttamente:

Query di aggregazione col GETDATE

 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:

Errore con GETDATE nel GROUP BY

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