Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162

    Intervallo di date non funzionante Sql Server 2008

    Salve, ho un probelma ho una tabella che ha i seguenti campi



    codice:
    CREATE TABLE [dbo].[Storico](
      [Id_Storico] [int] IDENTITY(1,1) NOT NULL,
      [DataInizio] [date] NOT NULL,
      [DataFine] [date] NOT NULL,
      [Note] [text] NOT NULL,
      [utente] [nvarchar](50) NOT NULL,
      [causale] [int] NOT NULL,
      [abilitato] [bit] NOT NULL,
     CONSTRAINT [PK_Storico_1] PRIMARY KEY CLUSTERED 
    (
      [Id_Storico] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    Da questa tabella devo controllare se esiste un record in un range di date con una specifica causale
    quindi io ho fatto la query così:


    codice:
    codice:
    ALTER PROCEDURE [dbo].[ExistStorico_1](@data_in datetime,@data_fin datetime,@causale int)
    AS
    BEGIN
    select Id_Storico
    from Storico s
    where @data_in >= s.DataInizio
     AND @data_fin <= s.DataFine
       AND s.causale=@causale
    Il punto è che se io ho nella tabella questi valori
    DataInizio=01/10/2009
    DataFine=31/10/2009
    Causale=pippo

    e vado a inserire una data che va dal 01/09/2009 al 31/10/2009 e con la stessa causale mi deve dire che il periodo è già occupato.

    Ho provato a mettere dei valori varchar come parametri nella stored procedure e poi fargli un cast di tipo ISO ma nulla.
    Qualcuno ha un idea?
    Sono un pò disperato a capire il perchè!


    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Nessuno mi può dare una risposta?

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Beh ... il 01/09/2009 non e' >= del 01/10/2009 quindi il comportamento del DBMS mi sembra corretto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Innanzitutto grazie per il tuo intervento tempestivo,
    Si hai perfettamente ragione e quindi stavo pensando di fare in modo che la datainiziale sia compresa nell'intervallo anche "@data_in<=datainiziale" e quindi la stored diventerebbe così:


    codice:
    ALTER PROCEDURE [dbo].[ExistStorico_1](@data_in datetime,@data_fin datetime,@causale int)
    AS
    BEGIN
    select Id_Storico
    from Storico s
    where (@data_in >= s.DataInizio and @data_in <= s.DataInizio)
    AND(@data_fin <= s.DataFine and @data_fin>= s.DataFine)
       AND s.causale=@causale
    ma anche così non sembra piacergli.


    Potresti darmi un suggerimento anche un link!

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non mi pare che tutte quelle condizioni (AND) possano essere contemporaneamente verificate.

    Per dare una risposta coerente, fai degli esempi di cosa vuoi ottenere, con delle date in concreto ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2007
    Messaggi
    162
    Certamente, la tabella conerrà questi possibili valori:

    codice:
    2	01/10/2009 0.00.00	31/10/2009 0.00.00	prova	pippo	38	True
    3	01/11/2009 0.00.00	30/11/2009 0.00.00	prova1	poldo	37	False
    4	01/10/2009 0.00.00	31/10/2009 0.00.00	prova2	pedro	37	True
    5	01/12/2009 0.00.00	31/12/2009 0.00.00	prova3	pippone	45	False
    la select che sto cercando di sviluppare mi deve tornare(una scelta personale)l'Id di quest'ultima nel caso ci sia la sequenza esatta della data iniziale e della data finale con la relativa causale.

    però vorrei anche, che se metto un range di date e in questo range di date ci fosse un perido(tra la data iniziale e la data finale) me lo segnalasse come record esistente.

    Es:
    DataIniziale:01/09/2009 - DataFinale 31/10/2009 causale 38

    mi dovrebbe dire che il record esiste già
    come dovrebbe dirmelo anche se
    la situazione sarebbe la seguente:

    Es.DataIniziale:01/10/2009 - DataFinale:31/10/2009 causale 38

    oppure ancora
    Es. DataIniziale 01/10/2009 - DataFinale:30/11/2009 causale 38
    oppure con le stesse date ma con causale 37 perchè nei record di esempi che ho inserito c'è anche il periodo che va dal 01/11/2009 al 30/11/2009 con causale 37

    Spero di essere stato chiaro e spero che mi potrai dare una mano!

    Grazieancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.