2017-10-20 60 views
0

下面列是我的表的一部分:SELECT * FROM x,其中列季

enter image description here

我想開始操縱根據日期表。本專欄將是唯一的日期是03-31或06-30

喜歡的東西:

Select * from Table1.dbo.TableOne 
where Period in 03-31 

或更換03-31與06-30

我並不擔心篩查到今年爲止。

我想問題是,我該如何篩選/過濾週期列的6到11個字符。

感謝您的指點。

+0

我將列轉換爲日期並且不包含時間 – AdMac

+0

「期間」具有開始,結束和持續時間(3中的1是從其他2中導出的,通常是持續時間)。如果你想給一段時間的某個名稱或代碼進行過濾,那麼你不需要一個日期列。 –

+0

爲什麼喲在很多行上需要相同的日期? &順便說一句,日期不會以他們在屏幕上顯示的方式存儲(它們存儲爲一組數字) –

回答

0

的一種方式是使用MONTH()DAY()

Select * 
from Table1.dbo.TableOne 
where month(Period) = 3 and day(Period) = 31 
; 

或者DATEPART()例如

Select * 
from Table1.dbo.TableOne 
where datepart(month,Period) = 3 and datepart(day,Period) = 31 
; 

因爲一個人的使用功能,數據比較恆定的,這些都不是超級有效的方法來過濾大表。

效率較低方式也存在將日期轉換爲字符串並比較這些方式,例如,

Select * 
from Table1.dbo.TableOne 
where right(convert(varchar(8),Period,112),4) = '0331' 
; 

爲SQL Server 2012起FORMAT()可用:

Select * 
from Table1.dbo.TableOne 
where format(Period,'MMdd') = '0331' 
; 

不過我當然不鼓勵任何人日期轉換成用於過濾字符串,它只是提到,因爲你很可能會看到這樣的方法別處。

+0

謝謝@Used_By_Already,你的前兩個建議都有效。我現在使用它們,但也在考慮更有效的方式來設置我的表格或查詢日期字段。 – AdMac

相關問題