2017-10-20 71 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

相关问题