2017-05-31 50 views
0

我正嘗試在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

回答

0

試試這個...

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

0

您可以使用轉換在where子句以及下面:

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

'關聯的所有'Job_Type',謝謝你的回答。我已經發布了上面的其他信息,試圖澄清我的問題。你能看看嗎? – user2911539

0

如果你想找到一個特定日期啓動作業,那麼我會建議:

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