下面列是我的表的一部分: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中导出的,通常是持续时间)。如果你想给一段时间的某个名称或代码进行过滤,那么你不需要一个日期列。 –
为什么哟在很多行上需要相同的日期? &顺便说一句,日期不会以他们在屏幕上显示的方式存储(它们存储为一组数字) –