Solved

Day of Week function in TSQL

Posted on 2004-04-08
9
9,673 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Database Solutions Engineer FAQs

In this series, we will discuss common questions received as a database Solutions Engineer at Percona. In this role, we speak with a wide array of MySQL and MongoDB users responsible for both extremely large and complex environments to smaller single-server environments.

 
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
 
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

Back Up Your Microsoft Windows Server®

Back up all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

Question has a verified solution.

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

Why is this different from all of the other step by step guides?  Because I make a living as a DBA and not as a writer and I lived through this experience. Defining the name: When I talk to people they say different names on this subject stuff l…
JSON is being used more and more, besides XML, and you surely wanted to parse the data out into SQL instead of doing it in some Javascript. The below function in SQL Server can do the job for you, returning a quick table with the parsed data.
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.
Viewers will learn how the fundamental information of how to create a table.

624 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