2012-10-12 93 views
3

我正在使用SQL Server 2008,我有時間間隔10分鐘的時間列(varchar)。我想,以顯示與半小時的基礎時間..如何在sql中顯示半小時和小時間隔的時間

表(timeslot)有這樣的數據:

time 
----- 
11:10 AM 
11:20 AM 
11:30 AM 
11:40 AM 
11:50 AM 
12:00 PM 
12:10 PM 
12:20 PM 
12:30 PM 
12:40 PM 
12:50 PM 
01:00 PM 
01:10 PM 
01:20 PM 

而且我想這顯示輸出:

time 
----- 
11:00 AM 
11:30 AM 
12:00 PM 
12:30 PM 
01:00 PM 
01:30 PM 

任何人可以幫我解決這個問題?在此先感謝...

+2

時間? **爲什麼?!?!?** - 使用適當的數據類型 - 'TIME'! –

回答

0

嘗試這樣:

SELECT 
    (list of columns) 
FROM 
    dbo.YourTableWithTheTime 
WHERE 
    DATEPART(MINUTE, CAST(YourTimeColumnHere as TIME)) IN (0, 30) 

當然 - 如果你在第一個地方使用的TIME適當數據類型的列,你可以保存自己的CAST(.. as TIME)結構而事情會更容易....

更新:如果你需要你的時間訂購 - 使用:

SELECT 
    DISTINCT [time] 
FROM 
    dbo.YourTableWithTheTime 
WHERE 
    DATEPART(MINUTE, CAST([time] as TIME)) IN (0, 30) 
ORDER BY 
    CAST([time] as TIME) 

PS:這也是一個非常糟糕的主意命名列time - 因爲這是存儲爲varchar保留關鍵字(數據類型),在SQL Server 2008中.....

+0

非常感謝您的親愛的,但我仍然每行得到兩次。如果我通過選項添加不同或分組,我會得到正確的答案。但不按時間順序,該列以01開頭:PM我想從上午11:00開始。 – Mahesh

+0

您需要在您的列中選擇您的列作爲時間在您的列中選擇此列的ORDER BY – YvesR

+0

按列順序投射不工作 – Mahesh

0
WITH CTE 
AS (SELECT DISTINCT columnname FROM table_name 
WHERE DATEPART(MINUTE, CAST(column as TIME)) IN (0, 30)) 
SELECT columnname 
FROM CTE 
ORDER BY CAST(columnname as time) 
+0

非常感謝! – Mahesh

相關問題