下面列是我的表的一部分:SELECT * FROM x,其中列季
我想開始操縱根據日期表。本專欄將是唯一的日期是03-31或06-30
喜歡的東西:
Select * from Table1.dbo.TableOne
where Period in 03-31
或更換03-31與06-30
我並不擔心篩查到今年爲止。
我想問題是,我該如何篩選/過濾週期列的6到11個字符。
感謝您的指點。
下面列是我的表的一部分:SELECT * FROM x,其中列季
我想開始操縱根據日期表。本專欄將是唯一的日期是03-31或06-30
喜歡的東西:
Select * from Table1.dbo.TableOne
where Period in 03-31
或更換03-31與06-30
我並不擔心篩查到今年爲止。
我想問題是,我該如何篩選/過濾週期列的6到11個字符。
感謝您的指點。
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'
;
不過我當然不鼓勵任何人日期轉換成用於過濾字符串,它只是提到,因爲你很可能會看到這樣的方法別處。
謝謝@Used_By_Already,你的前兩個建議都有效。我現在使用它們,但也在考慮更有效的方式來設置我的表格或查詢日期字段。 – AdMac
我將列轉換爲日期並且不包含時間 – AdMac
「期間」具有開始,結束和持續時間(3中的1是從其他2中導出的,通常是持續時間)。如果你想給一段時間的某個名稱或代碼進行過濾,那麼你不需要一個日期列。 –
爲什麼喲在很多行上需要相同的日期? &順便說一句,日期不會以他們在屏幕上顯示的方式存儲(它們存儲爲一組數字) –