+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Date - mese precedente

  1. #1
    CC88 non è in linea Scolaretto
    Post
    80

    Date - mese precedente

    Salve a tutti.

    Ho una stored procedure che attualmente con delle variabili va ad eseguire dei between ed usando le funzioni sql server sottrae un mese alla data corrente quindi crea (oggi è il 30 maggio) un

    codice:
    between 20170430 and 20170530
    Avrei necessità invece, di prendere tutto il mese precedente, non di tornare indietro di un mese.
    Quindi, siamo al 30 maggio, oppure al 10 maggio, oppure al 20 maggio...

    codice:
    between 20170401 and 20170430
    Il 10 gennaio:

    codice:
    between 20161201 and 20161231
    Avete idee? Funzioni già esistenti (magari)?

    Altro?

    Grazie molte per qualsiasi aiuto.
    Ultima modifica di CC88; 30-05-2017 09:45 

  2. #2
    L'avatar di Brontolo
    Brontolo non è in linea Very Important Person
    Post
    2,640
    Puoi usare le funzioni Month() e Year().
    Il regolamento del forum: la prima cosa da leggere.

  3. #3
    CC88 non è in linea Scolaretto
    Post
    80
    Ciao grazie.

    Al momento ho risolto così:

    codice:
    declare @first as DATE
    declare @last as DATE
    
    declare @firstday as VARCHAR(8)
    declare @lastday as VARCHAR(8)
    
    set @first = (SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE())-1, 0)) -- primo giorno mese precedente
    set @last = (select DATEADD(MONTH, DATEDIFF(MONTH, -1, GETDATE())-1, -1)) --ultimo giorno mese precedente
    
    set @firstday = (SELECT CONVERT(VARCHAR(8), @first, 112))
    set @lastday = (SELECT CONVERT(VARCHAR(8), @last, 112))
    
    PRINT @firstday
    PRINT @lastday

  4. #4
    Dev-01 non è in linea Scolaretto
    Post
    356
    Scusa, ma essendo il primo giorno sempre il 1°, non sarebbe meglio dichiarare una costante?

    Anche se di poco dovrebbero migliorare pure le prestazioni e diminuire il carico sul server (poi dipende dal numero di operazioni "simultanee").

  5. #5
    L'avatar di nman
    nman non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,485
    Certamente con TSQL sono una schiappetta e in quanto sto proponendo ci deve essere qualche scemata
    pero mi sembra funzionale e semplice
    codice:
    declare @FirDay as datetime
    declare @LasDay as datetime
    
    set @LasDay = DATEADD(dd, - Day(GETDATE()), GETDATE())
    set @FirDay = DATEADD(dd, - (Day(@LasDay) - 1), @LasDay)
    
    print CONVERT(VARCHAR(8), @FirDay, 112)
    print CONVERT(VARCHAR(8), @LasDay, 112)
    .
    Ultima modifica di nman; 01-06-2017 19:43 

  6. #6
    CC88 non è in linea Scolaretto
    Post
    80
    Quote Originariamente inviato da nman Visualizza il messaggio
    Certamente con TSQL sono una schiappetta e in quanto sto proponendo ci deve essere qualche scemata
    pero mi sembra funzionale e semplice
    codice:
    declare @FirDay as datetime
    declare @LasDay as datetime
    
    set @LasDay = DATEADD(dd, - Day(GETDATE()), GETDATE())
    set @FirDay = DATEADD(dd, - (Day(@LasDay) - 1), @LasDay)
    
    print CONVERT(VARCHAR(8), @FirDay, 112)
    print CONVERT(VARCHAR(8), @LasDay, 112)
    .
    non è quello che ho fatto sopra solo più 'compatto'?

  7. #7
    L'avatar di nman
    nman non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,485
    Quote Originariamente inviato da CC88 Visualizza il messaggio
    ....... Avete idee? .......
    Quote Originariamente inviato da CC88 Visualizza il messaggio
    non è quello che ho fatto sopra solo più 'compatto'?
    Booohhhhh!!!
    Si in effetti e la stessa cosa

    Tu hai chiesto se abbiamo idee e io non ho neanche guardato nel dettaglio il tuo codice
    (sarei stato influenzato .....)

    ho scritto direttamente quello che mi veniva fuori dal mio unico e stanco neurone

    .

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi