Solved

Day of Week function in TSQL

Posted on 2004-04-08
9
9,668 Views
Last Modified: 2012-06-21
I'm attempting to write a function that will provide me with next day of a given date.  For instance, if the date I have is April 8 2004 (thursday) and I need the first monday following that date.

The problem I've run into is that I can't seem to find a way of detecting what the weekday of a date is.

I've gone this far...

Create Function dbo.GetNextDay(@SDate DateTime, @Day Int)
Returns DateTime
AS
Begin
      Declare @Ret DateTime,
            @DayDif Int

      --HERE I NEED TO SET @DAYDIF TO THE NUMBER OF DAYS BETWEEN THE CURRENT DAY AND THE DAY I'M LOOKING FOR

      Set @Ret = DateAdd(@SDate,@DayDif)

      Return @Ret
End
Go


Thanks in advance.
0
Comment
Question by:JackieLee
  • 5
  • 3
9 Comments
 
LVL 6

Expert Comment

by:billy21
ID: 10782411
You use DatePart as so...

select DatePart(dw,'2 nov 2003')
0
 
LVL 6

Expert Comment

by:billy21
ID: 10782423
Also the @@DATEFIRST global tells you the first day of week.  It can be set too

Set @@DATEFIRST = 1 --sets the first day of week to Monday.
0
 
LVL 26

Expert Comment

by:Hilaire
ID: 10782437
this solution works whith any langage settings

--with  @day = 1 for Monday, 2 for Wednesday, and so on through 7 for Sunday.
set @datedif = (15+@day-@@datefirst-datepart(dw, getdate()))%7

Hilaire
0
 
LVL 26

Expert Comment

by:Hilaire
ID: 10782448
Create Function dbo.GetNextDay(@SDate DateTime, @Day Int)
Returns DateTime
AS
Begin
     Declare @Ret DateTime,
          @DayDif Int
     set @DayDif = (15+@day-@@datefirst-datepart(dw, getdate()))%7
     Set @Ret = DateAdd(@SDate,@DayDif)
     Return @Ret
End
Go
0
Zoho SalesIQ

Hassle-free live chat software re-imagined for business growth. 2 users, always free.

 
LVL 6

Expert Comment

by:billy21
ID: 10782455
Hilaire,

Should getdate() not be @Sdate?
0
 
LVL 26

Expert Comment

by:Hilaire
ID: 10782459
sorry, tested with getdate(), but I think you need if with @SDate instead

Create Function dbo.GetNextDay(@SDate DateTime, @Day Int)
Returns DateTime
AS
Begin
     Declare @Ret DateTime,
          @DayDif Int
     set @DayDif = (15+@day-@@datefirst-datepart(dw, @SDate))%7
     Set @Ret = DateAdd(@SDate,@DayDif)
     Return @Ret
End
Go
0
 
LVL 26

Expert Comment

by:Hilaire
ID: 10782465
Thanks billy21,
I think ours posts collided ; )
0
 
LVL 26

Accepted Solution

by:
Hilaire earned 250 total points
ID: 10782491
BTW, the whole thing could write

Create Function dbo.GetNextDay(@SDate DateTime, @Day Int)
Returns DateTime
AS
Begin
     Return DateAdd(d, (15+@day-@@datefirst-datepart(dw, @SDate))%7, @SDate)
End
Go

Note I changed the dateadd, the parameters order was wrong and the "d," was missing
0
 
LVL 1

Author Comment

by:JackieLee
ID: 10782501
Thanks Hilaire and Billy.  I chose the more complete/better response.
0

Featured Post

NAS Cloud Backup Strategies

This article explains backup scenarios when using network storage. We review the so-called “3-2-1 strategy” and summarize the methods you can use to send NAS data to the cloud

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

I have a large data set and a SSIS package. How can I load this file in multi threading?
This article shows gives you an overview on SQL Server 2016 row level security. You will also get to know the usages of row-level-security and how it works
This video shows how to set up a shell script to accept a positional parameter when called, pass that to a SQL script, accept the output from the statement back and then manipulate it in the Shell.
Via a live example, show how to extract information from SQL Server on Database, Connection and Server properties

932 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now