Welcome to Sign in | Help
in Search

functie sql server 2000 data anterioara

Last post 09-19-2008, 10:55 AM by Alex. 9 replies.
Sort Posts: Previous Next
  •  09-19-2008, 9:26 AM 5637

    functie sql server 2000 data anterioara

    salut, aveti cumva o functie asemanatoare? as vrea o functie care primeste ca parametru o data si:

    daca data respectiva este sambata sau duminica imi da mesaj de eroare "Nu se poate genera"

    daca data respectiva este o zi lucratoare intoarce asa

    primeste luni intoarce joi si vineri din saptamana trecuta

    primeste marti intoarce vineri saptamana trecuta si luni dinaintea lui marti primit

    primeste miercuri intoarce luni si marti adica 2 zile din urma

    si tot asa.....

    multumesc mult

    alex.

  •  09-19-2008, 9:35 AM 5638 in reply to 5637

    Re: functie sql server 2000 data anterioara

    in ce vers de sql server ? 2000, 2005, 2008 ? ( ideea de return table ...)

    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  09-19-2008, 9:43 AM 5639 in reply to 5638

    Re: functie sql server 2000 data anterioara

    2000
  •  09-19-2008, 9:47 AM 5640 in reply to 5637

    Re: functie sql server 2000 data anterioara

    Se poate face, dar eşti sigur că nu trebuie să ţii cont şi de sărbătorile legale ?

    Răzvan
  •  09-19-2008, 9:57 AM 5641 in reply to 5640

    Re: functie sql server 2000 data anterioara

    nu, nu ma intereseaza sarbatorile legale

    multumesc

  •  09-19-2008, 10:18 AM 5642 in reply to 5640

    Re: functie sql server 2000 data anterioara

    am asta:

    declare @date datetime
    set @date = '20080919'


    DECLARE @varDayOfWeek INT
    SET @varDayOfWeek =((CAST(cast((RTRIM(CONVERT(CHAR(20),@date,101))+' 12:00:00.000') as DATETIME) as INT)%7))


    IF (@varDayOfWeek=0 OR @varDayOfWeek=6)
    SELECT 'Nu se poate procesa'
    ELSE
    SELECT dateadd(day,-1,@date) oZiInUrma, dateadd(day,-2,@date) douaZileInUrma

    dar cum fac daca oZiInUrma sau douaZileInUrma sa mearga in urma la ziua lucratoare

    alex.

  •  09-19-2008, 10:23 AM 5643 in reply to 5642

    Re: functie sql server 2000 data anterioara

    CREATE FUNCTION ZilelePrecedente(@Data datetime)
    RETURNS TABLE AS RETURN
    SELECT @Data-CASE (DATEPART(weekday,@Data)+@@DATEFIRST)%7
            WHEN 0 THEN null
            WHEN 1 THEN null
            WHEN 2 THEN 3
            WHEN 3 THEN 1
            WHEN 4 THEN 1
            WHEN 5 THEN 1
            WHEN 6 THEN 1
        END AS Data
    UNION ALL
    SELECT @Data-CASE (DATEPART(weekday,@Data)+@@DATEFIRST)%7
            WHEN 0 THEN null
            WHEN 1 THEN null
            WHEN 2 THEN 4
            WHEN 3 THEN 4
            WHEN 4 THEN 2
            WHEN 5 THEN 2
            WHEN 6 THEN 2
        END AS Data
    GO
    SELECT * FROM ZilelePrecedente('20080918')

    Răzvan
  •  09-19-2008, 10:26 AM 5644 in reply to 5642

    Re: functie sql server 2000 data anterioara

    Alex:

    am asta:

    declare @date datetime
    set @date = '20080919'


    DECLARE @varDayOfWeek INT
    SET @varDayOfWeek =((CAST(cast((RTRIM(CONVERT(CHAR(20),@date,101))+' 12:00:00.000') as DATETIME) as INT)%7))


    IF (@varDayOfWeek=0 OR @varDayOfWeek=6)
    SELECT 'Nu se poate procesa'
    ELSE
    SELECT dateadd(day,-1,@date) oZiInUrma, dateadd(day,-2,@date) douaZileInUrma

    dar cum fac daca oZiInUrma sau douaZileInUrma sa mearga in urma la ziua lucratoare

    alex.


    Obs 1
    Select ((CAST(cast((RTRIM(CONVERT(CHAR(20),getdate(),101))+' 12:00:00.000') as DATETIME) as INT)%7))
    e aceeasi ca
    select datepart(dw,getdate())-1 ( ma rog, depinde si de setdatefirst)

    obs 2.
    ca sa fie in zi lucratoare
    if e luni si selectezi nu 2 zile in urma, ci 3 si4
    if e marti, selectezi 1 zi in urma si 4
    else
    2 zile in urma



    Ignat Andrei
    http://serviciipeweb.ro/iafblog
  •  09-19-2008, 10:30 AM 5645 in reply to 5644

    Re: functie sql server 2000 data anterioara

    O soluţie puţin mai complicată:
    ALTER FUNCTION PrajestePestele (@data DATETIME)
    RETURNS @tabel TABLE (Data DATETIME)
    AS
    BEGIN
      DECLARE @zi INT
      SET @zi = CAST(@data AS INT) % 7

      IF @zi = 0 --L
        BEGIN
          INSERT INTO @tabel VALUES( DATEADD(dd,-3,@data) )
          INSERT INTO @tabel VALUES( DATEADD(dd,-4,@data) )
        END
      ELSE
        IF @zi = 1 --Ma
          BEGIN
            INSERT INTO @tabel VALUES( DATEADD(dd,-1,@data) )
            INSERT INTO @tabel VALUES( DATEADD(dd,-4,@data) )
          END
        ELSE
          IF @zi IN (2,3,4)
          BEGIN
            INSERT INTO @tabel VALUES( DATEADD(dd,-1,@data) )
            INSERT INTO @tabel VALUES( DATEADD(dd,-2,@data) )
          END

      RETURN
    END
    GO


    SELECT * FROM dbo.PrajestePestele('2008-09-12')
    SELECT * FROM dbo.PrajestePestele('2008-09-13')
    SELECT * FROM dbo.PrajestePestele('2008-09-14')
    SELECT * FROM dbo.PrajestePestele('2008-09-15')
    SELECT * FROM dbo.PrajestePestele('2008-09-16')
    GO

    SELECT CASE
        WHEN EXISTS(SELECT * FROM dbo.PrajestePestele('2008-09-15')) THEN 'Se poate praji'
        ELSE 'Nu se poate praji'
        END

  •  09-19-2008, 10:55 AM 5647 in reply to 5643

    Re: functie sql server 2000 data anterioara

    multumesc mult, e perfect.

    alex.

View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems