TSQL SELEZIONARE data precedente record di

Voglio selezionare tutti i record da una tabella Log dove il DateAndTime valori di campo (di tipo datetime) sono per il giorno prima di oggi, a prescindere che giorno è.

Quindi, se oggi è 2011-06-08, voglio selezionare tutte le righe in cui DateAndTime è maggiore o uguale a 2011-06-07 00:00:00 e anche meno di 2011-06-08 00:00:00.

Sto cercando di indovinare il potenziale insidia qui sarebbe il comportamento al 1 ° giorno del mese, come, ovviamente, una data come 2011-06-00 non è valido e deve essere 2011-05-31.

InformationsquelleAutor Alex | 2011-06-08

 

5 Replies
  1. 27

    Per SQL Server 2008, è possibile utilizzare questo.

    select *
    from [log]
    where cast(DateAndTime as date) = cast(getdate()-1 as date)

    Pre 2008 è possibile utilizzare questo

    select *
    from [log]
    where DateAndTime >= dateadd(d, datediff(d, 0, getdate())-1, 0) and
          DateAndTime < dateadd(d, datediff(d, 0, getdate()), 0)

    Relative a DBA: Il Cast è sargable ma è una buona idea?

    • Casting colonna potrebbe avere gravi implicazioni in termini di prestazioni, vedere JanW la soluzione di sotto
    • Sì, si può, con le stime di cardinalità. Non con sargability. Hai letto la domanda su DBA collegati mia risposta?
  2. 3
    SELECT * FROM Log
    WHERE DateAndTime >= DATEADD(DAY,-1, CAST(GETDATE() AS DATE))
    AND DateAndTime < CAST(CAST(GETDATE() AS DATE) AS DATETIME)
  3. 1

    Questo esempio si presuppone che SQL Server:

    select *
    from log
    where convert(varchar(8), DateAndTime , 112)  = convert(varchar(8), getdate()-1, 112)

    Essenzialmente, convertire la data aaaammgg (il 112 parametro) e poi verificare se è uguale alla data di ieri (getdate()-1), convertito aaaammgg.

  4. 0

    Assumendo SQL Server

     declare @today date
     set @today = GETDATE()
    
     select * from Log where DateAndTime between DATEADD(dd, -1, @today ) and @today
  5. 0

    Dovrebbe includere operatore condizionale e non tra .
    Altrimenti si comprende oggi record.

    Declare @today date
    Set @today = GETDATE()
    
    
    Select YourcolumnNames from log
    Where DateAndTime >= DATEADD(dd, -1, @today ) and DateAndTime < DATEADD(dd, -1, @today )

    Inoltre, si dovrebbe menzionare il nome della colonna e * deve essere evitato nell’istruzione select. Questo può migliorare le prestazioni

Lascia un commento