Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Day of Week function in TSQL

Posted on 2004-04-08
9
Medium Priority
?
9,676 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
Windows Server 2016: All you need to know

Learn about Hyper-V features that increase functionality and usability of Microsoft Windows Server 2016. Also, throughout this eBook, you’ll find some basic PowerShell examples that will help you leverage the scripts in your 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 1000 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

NFR key for Veeam Backup for Microsoft Office 365

Veeam is happy to provide a free NFR license (for 1 year, up to 10 users). This license allows for the non‑production use of Veeam Backup for Microsoft Office 365 in your home lab without any feature limitations.

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…
Ready to get certified? Check out some courses that help you prepare for third-party exams.
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…
Viewers will learn how the fundamental information of how to create a table.

722 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