HomeAboutWebHostingNetworkingContact

Hey Jones!

Technical Services

Hey Jones LLC
505 Poli St
Suite 301
Ventura, CA 93001
(800) 439-1472
info@heyjones.com

  • May 4, 2011 1:28 pm

    SQL DATEPART(dd, getdate()) vs VB.NET Today.DayOfWeek

    WARNING: THIS POST IS REALLY NERDY.

    While developing a calendar application, I ran into an issue that took hours to diagnose and nearly prompted me to wrap my car around a tree. The issue is this…

    I was taking a date from SQL, using the DATEPART function to return an integer value for the day of the week, then comparing that to the result of the DayOfWeek function in VB.NET. Here’s how it should work:

    SQL

    DECLARE @KillMe AS datetime;

    SET @KillMe = ‘5/4/2011’;

    SELECT DATEPART(d, @KillMe);

    VB.NET

    Dim KillMe As Date = CDate(‘5/4/2011’);

    Return KillMe.DayOfWeek

    So assuming that SQL considers Sunday = 1, it will return an integer value of 4, and since I’m using the same date, VB.NET should return a 4 as well… right?

    Wrong.

    Apparently, GETDATE() in SQL returns 1 for Sunday and goes from there, while VB.NET starts at 0 for Sunday and ends at 6 for Saturday. Don’t ask my why this took so long to figure out, but I suspect that four failed attempts at a passing grade in Intermediate Algebra might be only partially at fault, while Microsoft holds the lions share of the blame. All that having been said, here’s the fix:

    VB.NET

    Dim KillMe As Date = CDate(‘5/4/2011’);

    Return CInt(KillMe.DayOfWeek) + 1

    It’s hinky and lame, I know, but I decided that correcting SQL by subtracting 1 was more complicated.

    1. heyjones posted this