我想从一个月的第1天到第30/31/28期搜索一个循环检查datepart(dw,) [英] I want a loop that searches from day 1 to 30/31/28 of a month checks datepart(dw,)

查看:81
本文介绍了我想从一个月的第1天到第30/31/28期搜索一个循环检查datepart(dw,)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要一个循环,搜索从第1天到第30/31/28个月的日期是当月的第一天dw为星期日返回1,所以如果dw是星期日,那么算它是逻辑;

我面临2个prbs

1)dw这里在Vstudio中返回4个星期日(可能是Int 32是prb我猜)但是在Sqlserver中Datepart返回一个同一天。

2)日期添加设置日期到第2个月的第2个bt之后它失败





I want a loop that searches from day 1 to 30/31/28 of a month date is the first day of current month dw returns 1 for sunday so if dw is a sunday then count it that's the logic;
I am facing 2 prbs
1)dw here returns 4 for sunday in Vstudio (may be Int 32 is a prb i guess) however in Sqlserver Datepart returns one for the same date.
2) Date add sets date to 2nd of month in 2nd ittration bt after that it fails


int firstday =Convert.ToInt32( Helper.ExeCuteReader("SELECT Day( CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(getdate())-1),getdate()),101))"));// first day of month
                    // till the day in which you r giving salary
                 //int lastday =Convert.ToInt32( Helper.ExeCuteReader("SELECT Day( CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,getdate()))),DATEADD(mm,1,getdate())),101) )"));//last day
                 int today = Convert.ToInt32(Helper.ExeCuteReader("Select Day(getdate())"));
                 int totaldays = Convert.ToInt32(Helper.ExeCuteReader("SELECT DateDiff(dd,CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(getdate())-1),getdate()),101),getdate())"));
                 DateTime date = Convert.ToDateTime(Helper.ExeCuteReader("SELECT CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(getdate())-1),getdate()),101) "));
                 // day1--datetime value
                 int dw = 0,sunday=0;
                 for (int i = firstday; i <= today; i++)
                 {
                     string a = Helper.ExeCuteReader("select datepart(dw, '" + date + "')");
                     dw = Convert.ToInt32(a);
                     // day1--datetime value
                     string c = Helper.ExeCuteReader("select DATEADD(day,1,'" + date + "')");
                     date = Convert.ToDateTime(c);
                     if (dw == 1)//it should be one bt int32 is conerting it to four
                     {
                         sunday++;
                     }

推荐答案

我的第二个Matt T Heffron。在代码而不是数据库中执行。



由于我不太了解您的要求,这里有一个使用日期时间 [ ^ ]以我的心血来潮编码:
I second Matt T Heffron. Do it in code instead of database.

Since I didn't understand your requirement very well, here's an example of working with DateTime[^] coded at my whim:
void ShowExample()
{
    DateTime salaryDay = DateTime.Now;

    DateTime monthStart = new DateTime(salaryDay.Year, salaryDay.Month, 1);

    int daysInMonth = DateTime.DaysInMonth(salaryDay.Year, salaryDay.Month);
    DateTime monthEnd = new DateTime(salaryDay.Year, salaryDay.Month, daysInMonth);

    int sundays = 0;
    for (DateTime dt = monthStart; dt < monthEnd; dt += TimeSpan.FromDays(1))
    {
        if (dt.DayOfWeek == DayOfWeek.Sunday)
        {
            sundays++;
        }
    }
}


这篇关于我想从一个月的第1天到第30/31/28期搜索一个循环检查datepart(dw,)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆