C# 从日期字段中计算日期

C# 从日期字段中计算日期,c#,mysql,sql-server,C#,Mysql,Sql Server,我有两个下拉列表-一年一个月。如果整个月都有记录,我必须打印gridview。为此,我有以下代码。我知道我的SQL查询是完全错误的 con.Open(); //count dates string cmd = "SELECT COUNT(EXTRACT(DATE FROM Duty_Date)) FROM DoctorActivity WHERE MONTH=@MONTH AND YEAR=@YEAR AND ([User_Id]=@User_Id)";

我有两个下拉列表-一年一个月。如果整个月都有记录,我必须打印gridview。为此,我有以下代码。我知道我的SQL查询是完全错误的

con.Open();
        //count dates 
        string cmd = "SELECT COUNT(EXTRACT(DATE FROM Duty_Date)) FROM DoctorActivity WHERE MONTH=@MONTH AND YEAR=@YEAR AND ([User_Id]=@User_Id)";
        SqlCommand commd = new SqlCommand(cmd, con);
        commd.Parameters.AddWithValue("@User_Id", DropDownList1.Text);
        commd.Parameters.AddWithValue("@MONTH", DropDownList2.Text);
        commd.Parameters.AddWithValue("@YEAR", DropDownList3.Text);
        int dateCount = (int)commd.ExecuteScalar();
        if (dateCount >= 30)
        {

            //show computer id and status in gridview
            GridView1.DataBind();
            GridView1.Visible = true;
        }

我对SQL查询仍然是新手。请帮忙。提前感谢。

提取是MySql函数,在Sql server 2008中提取datepart可以使用

SELECT CONVERT(date, getdate())  
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
或者,如果您使用的是旧版本,则可以使用

SELECT CONVERT(date, getdate())  
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
所以你必须把你的查询改成这样

SELECT COUNT(distinct convert(date,Duty_Date)) FROM DoctorActivity WHERE MONTH=@MONTH AND YEAR=@YEAR AND [User_Id]=@User_Id
SELECT COUNT(convert(date,Duty_Date)) FROM DoctorActivity

在Sql server 2008中,如果值班日期字段重复,请使用distinct以提取您可以使用的日期部分

SELECT CONVERT(date, getdate())  
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
或者,如果您使用的是旧版本,则可以使用

SELECT CONVERT(date, getdate())  
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date))
所以你必须把你的查询改成这样

SELECT COUNT(distinct convert(date,Duty_Date)) FROM DoctorActivity WHERE MONTH=@MONTH AND YEAR=@YEAR AND [User_Id]=@User_Id
SELECT COUNT(convert(date,Duty_Date)) FROM DoctorActivity

使用distinct如果值班日期字段中有重复项

您必须使用
CONVERT(date,yourdate)
在sql server中提取日期部分,在查询中更改日期提取部分,如下所示

SELECT COUNT(distinct convert(date,Duty_Date)) FROM DoctorActivity WHERE MONTH=@MONTH AND YEAR=@YEAR AND [User_Id]=@User_Id
SELECT COUNT(convert(date,Duty_Date)) FROM DoctorActivity

您必须使用
CONVERT(date,yourdate)
在sql server中提取日期部分,在查询中更改日期提取部分,如下所示

SELECT COUNT(distinct convert(date,Duty_Date)) FROM DoctorActivity WHERE MONTH=@MONTH AND YEAR=@YEAR AND [User_Id]=@User_Id
SELECT COUNT(convert(date,Duty_Date)) FROM DoctorActivity

我不明白,有什么问题吗?你能告诉我你的SQL表设计是什么吗?或者列Duty\u Date的数据类型是什么?我的sql数据库中有一个Duty\u Date字段。我只想提取日期部分,然后计算它是否超过30(取决于月份-可能是30或31,暂时不考虑2月)。因此,如果记录存在于2016年1月1日到2016年1月31日之间,那么我想打印gridview。请建议我使用正确的SQL查询来实现此目的。任务日期的数据类型为日期类型。我的表的其他列由这些日期的记录或数据组成。当你说“整个月都有记录”时,你的意思是记录应该在这个月的每一天都存在吗?我不知道,有什么问题吗?你能告诉我你的SQL表设计是什么吗?或者列Duty\u Date的数据类型是什么?我的sql数据库中有一个Duty\u Date字段。我只想提取日期部分,然后计算它是否超过30(取决于月份-可能是30或31,暂时不考虑2月)。因此,如果记录存在于2016年1月1日到2016年1月31日之间,那么我想打印gridview。请建议我使用正确的SQL查询来实现此目的。任务日期的数据类型为日期类型。我的表的其他列由这些日期的记录或数据组成。当您说“记录在整个月内都存在”时,您的意思是记录应该在每个月的每一天都存在吗?我使用了以下代码,您能告诉我,我在月和年部分的语法有什么问题-'string cmd=“SELECT COUNT(distinct convert(日期,值日))来自DoctorActivity,其中转换(月,值日)=@月,转换(年,值日)=@年和[用户Id]=@用户Id”'参考上面的链接,您必须使用date part函数从DateTime中提取月份和年份部分我使用了以下代码,您能告诉我月份和年份部分的语法有什么问题吗?'string cmd=“SELECT COUNT(distinct convert(date,Duty_date))from DoctorActivity WHERE convert(month,Duty_date)=@month and convert(年,工作日)=@year和[User\u Id]=@User\u Id”;“参考上述链接,您必须使用日期部分功能从datetime提取月份和年份部分