SQL 年与月分别为两个字段,怎么采用较高效率的查询起止范围
SQL 年与月分别为两个字段,如何采用较高效率的查询起止范围?
表如下:
tableA
year month count
2011 1 230
2012 5 1100
2013 8 3000
2013 10 3000
2014 2 1000
2014 9 6000
我需要查询2012年5月到2014年2月之间的记录,我想到的方法是拼接查询,如下:
但这样查询的效率并不高,我需要高效率的查询方法(使用LINQ TO SQL也可以),因为以后数据量会很大,不知道哪位高人有实现过类似的查询,还请指教,谢谢!
------解决思路----------------------
------解决思路----------------------
最好还是从存储格式上做文章,把数据以date数据类型存储,减少拼接的开销,可以用between and 来查找一个月的数据
------解决思路----------------------
表如下:
tableA
year month count
2011 1 230
2012 5 1100
2013 8 3000
2013 10 3000
2014 2 1000
2014 9 6000
我需要查询2012年5月到2014年2月之间的记录,我想到的方法是拼接查询,如下:
select * from tableA where CONVERT(date,CONVERT(varchar,year) +'-' + CONVERT(varchar,month) +'-01')
between '2012-5-1' and '2014-2-1'
但这样查询的效率并不高,我需要高效率的查询方法(使用LINQ TO SQL也可以),因为以后数据量会很大,不知道哪位高人有实现过类似的查询,还请指教,谢谢!
------解决思路----------------------
select * from tableA where year*100+month between 201205 and 201402
------解决思路----------------------
最好还是从存储格式上做文章,把数据以date数据类型存储,减少拼接的开销,可以用between and 来查找一个月的数据
------解决思路----------------------
USE tempdb
go
CREATE TABLE tableA([year] INT , [month] INT, [count] INT)
go
--处理方法:
ALTER TABLE tableA ADD YYMM AS RTRIM([year])+RIGHT(100+[month],2) PERSISTED
go
CREATE INDEX IX_tableA_YYMM ON tableA(YYMM);
go
SELECT *
FROM tableA
WHERE [YYMM] BETWEEN '2012-05' AND '2014-02'