如何在SQL语句的WHERE子句内修剪?

问题描述:

我正尝试在SQL数据库中使用datetime列来检索行的人Start_Time date等于某个值。如何在SQL语句的WHERE子句内修剪?

这里是我当前的SQL:

Select Job_Type 
FROM Shift 
WHERE Start_Time IN (SELECT DISTINCT CAST(Start_Time AS DATE) As Start_Time 
        FROM Shift) 

喜欢的START_TIME列存储这样:26/05/2017 16时06分00秒

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

我希望外部SELECT语句检索行Start_Time以相同的“日期”(26/05/2017)开头,我现在想忽略时间方面。

目前,由于WHERE Start_Time这段代码,这是错误的。它目前没有削减专栏的时间部分。

你们能告诉我如何删除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(); 

     } 
    } 
} 
+3

我没有得到查询的结构。如果你做了你想要的,你将会在'shift'中返回所有的行。另外,“Start_Time”的类型是什么?它是日期/时间还是字符串? –

+0

'Start_Time'是一个日期时间。我已经发布了上面的其他代码来试图澄清这个问题。以上,_repFullSchedule_是一个中继器,以“Friday 26/05/2017”的形式显示数据库中每一行的'Start_Time'。然后在内部中继器(jobRepeater)中,我想显示与各种'Start_Time的' – user2911539

试试这个...

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(convert(varchar(10),Start_Time,101) as date) IN (SELECT DISTINCT CAST(convert(varchar(10),Start_Time,101) AS DATE) As Start_Time FROM Shift) 
+0

嗨Ravi,感谢您的帮助。我正试图展示员工轮班。我目前有一个外部中继器,显示即将到来的班次的日期。上面的SQL是针对内部中继器的。我希望这个中继器显示与外部中继器的日期相关的job_types。上面的SQL显示所有日期的_all_作业类型。因此,而不是出现在相关的一天,它出现在所有的日子。无论他们是否在表 – user2911539

+0

链接它是否适合你... – Ravi

+0

如果这不清楚,我们可以移动这个对话聊天,所以我可以更清楚地解释我的问题? – user2911539

您可以使用转换在where子句以及下面:

WHERE convert(date, Start_Time) IN(SELECT DISTINCT CAST(Start_Time AS DATE) As Start_Time FROM Shift) 
+0

'关联的所有'Job_Type',谢谢你的回答。我已经发布了上面的其他信息,试图澄清我的问题。你能看看吗? – user2911539

如果你想找到一个特定日期启动作业,那么我会建议:

SELECT Job_Type 
FROM Shift 
WHERE CAST(Start_Time AS DATE) = '2017-05-26'; 

我不明白你想要什么用“IN”的事情。您在说:“选择在任何工作开始的日期开始的所有工作”。这与“选择所有开始日期已知的作业”相同。

如果你想天,只有一个作业(由不必要SELECT DISTINCT建议的可能性),那么你可以做:

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

嗨,例如:一个表行的_Job_Type_是“Waiter”,_Start_Time_是星期五,另一行有_Job_Type_的“Driver”和_Start_Time_星期六,我想在指定的日期显示每个作业 – user2911539

+0

@ user2911539 ...。Order使用C#代码来检测日期何时发生变化并对结果进行相应的格式化您在评论中指定的内容与问题提出的内容非常不同 –

+0

好的,你知道如何传递下面的_Start_Time字符串,进入SQL?'字符串Start_time = DataBinder.Eval(e.Item.DataItem,“Start_Time”)。ToString();' 'SqlCommand cmd = new SqlCommand(“Select Job_Type FROM Shift WHERE cas t(Start_Time as date)IN(SELECT DISTINCT CAST(Start_Time AS DATE)As Start_Time FROM Shift)“,con);' – user2911539