Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在SQL语句的WHERE子句中进行修剪?_C#_Sql_Asp.net_Sql Server_Ado.net - Fatal编程技术网

C# 如何在SQL语句的WHERE子句中进行修剪?

C# 如何在SQL语句的WHERE子句中进行修剪?,c#,sql,asp.net,sql-server,ado.net,C#,Sql,Asp.net,Sql Server,Ado.net,我试图在SQL数据库中使用datetime列来检索开始时间日期等于某个值的行 以下是我当前的SQL: Select Job_Type FROM Shift WHERE Start_Time IN (SELECT DISTINCT CAST(Start_Time AS DATE) As Start_Time FROM Shift) 开始时间列的存储方式如下:26/05/2017 16:06:00 上面的子查询返回的日期如下:26/05/2017 我希望外

我试图在SQL数据库中使用datetime列来检索开始时间日期等于某个值的行

以下是我当前的SQL:

Select Job_Type
FROM Shift
WHERE Start_Time IN (SELECT DISTINCT CAST(Start_Time AS DATE) As Start_Time
                     FROM Shift)
开始时间列的存储方式如下:26/05/2017 16:06:00

上面的子查询返回的日期如下:26/05/2017

我希望外部SELECT语句检索开始时间与2017年5月26日相同的行,我现在不考虑时间方面

目前,由于代码的WHERE Start_时间段,这是失败的。它目前并没有删减专栏的时间部分

你们能告诉我如何删除WHERE子句中的时间方面吗

CREATE TABLE [dbo].[Shift] (
[Shift_Id]    INT           IDENTITY (1, 1) NOT NULL,
[Start_Time]  DATETIME      NOT NULL,
[End_Time]    DATETIME      NOT NULL,
[Job_Type]    NVARCHAR (50) NOT NULL,
[Employee_Id] INT           NOT NULL,
[Available]   INT           NULL,
FOREIGN KEY ([Employee_Id]) REFERENCES [dbo].[Employee] ([Employee_Id]) ON DELETE CASCADE
);
此外,以下是我的完整代码:

   protected void repFullSchedule_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    using (SqlConnection con = new SqlConnection(connectionString))
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Repeater jobRepeater = (Repeater)e.Item.FindControl("repJobs");
            string Start_time = DataBinder.Eval(e.Item.DataItem, "Start_Time").ToString();
            SqlCommand cmd = new SqlCommand("Select Job_Type FROM Shift WHERE cast(Start_Time as date) IN (SELECT DISTINCT CAST(Start_Time AS DATE) As Start_Time FROM Shift)", con);
            SqlDataAdapter sda = new SqlDataAdapter(cmd);




            DataTable dt = new DataTable();
            sda.Fill(dt);
            jobRepeater.DataSource = dt;
            jobRepeater.DataBind();

        }
    }
}

您可以在where子句中使用convert,如下所示:

WHERE convert(date, Start_Time) IN(SELECT DISTINCT CAST(Start_Time AS DATE) As Start_Time FROM Shift)
试试这个

Select Job_Type FROM Shift WHERE cast(Start_Time as date) IN (SELECT DISTINCT CAST(Start_Time AS DATE) As Start_Time FROM Shift)
否则


如果你想找到在特定日期开始的工作,那么我建议:

SELECT Job_Type
FROM Shift
WHERE CAST(Start_Time AS DATE) = '2017-05-26';
我不明白你想用这个做什么。您的意思是:选择在任何作业开始日期开始的所有作业。这与选择开始日期已知的所有作业相同

如果您希望只有一份工作的天数(不必要的SELECT DISTINCT建议的可能性),则您可以执行以下操作:

SELECT MAX(Job_Type) as Job_Type
FROM Shift
GROUP BY CAST(Start_Time AS DATE)
HAVING COUNT(*) = 1;

我不了解查询的结构。如果您想做什么就做什么,您将在shift中返回所有行。另外,开始时间的类型是什么?是日期/时间还是字符串?“开始时间”是日期时间。我在上面发布了额外的代码,试图澄清这个问题。上面,repFullSchedule是一个中继器,以2017年5月26日星期五的形式显示数据库中每行的“开始时间”。然后在内部转发器jobRepeater中,我想显示所有与各种“开始时间”sHi Ravi关联的“作业类型”,感谢您的帮助。我试图显示员工的轮班情况。我现在有一个外部中继器,它显示即将轮班的日期。上面的SQL用于内部中继器。我希望此中继器显示与外部中继器日期关联的作业类型。上面的SQL将显示所有日期的所有作业类型。因此,它不会显示在关联的日期,而是显示在所有日期。不管他们是否在桌子上联系如果这不清楚,我们可以把这个对话转移到聊天室,这样我可以更清楚地解释我的问题吗?你可以邀请我聊天吗?我不知道如何邀请:嗨,例如:一个桌子行有一个工作类型的服务员,开始时间是星期五。另一排有工作类型的司机和周六的开始时间。我想显示指定日期下的每个作业。@user2911539。按日期订购。使用C代码检测日期何时更改,并相应地格式化结果。您在评论中指定的内容与问题所问的内容非常不同。好的,您知道如何将下面的_Start_Time字符串传递到SQL中吗?字符串Start_time=DataBinder.Evale.Item.DataItem,Start_time.ToString;SqlCommand cmd=new SqlCommandSelect Job_Type FROM Shift,其中castStart_Time作为日期,在中选择不同的castStart_Time作为日期作为Shift的开始时间,con;嗨,谢谢你的回答。我在上面发布了更多信息,试图澄清我的问题。你能看一下吗?
SELECT MAX(Job_Type) as Job_Type
FROM Shift
GROUP BY CAST(Start_Time AS DATE)
HAVING COUNT(*) = 1;