当前位置: 代码迷 >> Sql Server >> SQL怎么搜索排除日期
  详细解决方案

SQL怎么搜索排除日期

热度:100   发布时间:2016-04-24 09:39:59.0
SQL如何搜索排除日期
数据表AAA,有某列A
数据有
2014-1-1
2014-1-2
2014-1-3

这时候想搜索出的结果是,不含A的,一月的日期,有什么好的方法?
是要在另一张表存放,2014-1-1到2014-1-31吗?然后进行对比?
还是有什么函数能直接搜索?
如果要在另一张表存放整个日期表,那有什么办法存,好几年的数据一次性从进去吗?比如2014-1-1,到2024-12-31的?
------解决思路----------------------
可以考虑存一个完整的时间表,10年也就3000多行,性能上完全没问题
------解决思路----------------------
这时候想搜索出的结果是,不含A的,一月的日期,有什么好的方法?
是要在另一张表存放,2014-1-1到2014-1-31吗?然后进行对比?

这个想法可以,直接表连接就出来了,效率不错

如果要在另一张表存放整个日期表,那有什么办法存,好几年的数据一次性从进去吗?比如2014-1-1,到2024-12-31的?
SELECT DATEADD(DAY,number,'2014-1-1') FROM(
SELECT number FROM master..spt_values WHERE type='P'
UNION ALL SELECT number+2049 FROM master..spt_values WHERE type='P'
)T
WHERE DATEADD(DAY,number,'2014-1-1')<='2024-12-31'

------解决思路----------------------
DECLARE @startdate DATETIME ,
    @enddate DATETIME
SET @startdate = '2008-01-01'
SET @enddate = '2009-12-31'
SELECT 
    DISTINCT
        YEAR(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [year] ,
        MONTH(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [month]
FROM    master..spt_values
WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
        AND number >= 0
        AND type = 'p'

------解决思路----------------------
完善一下:
DECLARE @startdate DATETIME ,
    @enddate DATETIME
SET @startdate = '2008-01-01'
SET @enddate = '2008-02-01'
SELECT 
    DISTINCT
        cast(YEAR(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120))as char(4))+'-'+
        right('00'+cast(MONTH(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120))as varchar(2)),2) +'-'+
 right('00'+cast(day(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120))as varchar(2)),2)[年月日]
FROM    master..spt_values
WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
        AND number >= 0
        AND type = 'p'

/*
年月日
--------------
2008-01-01
2008-01-02
2008-01-03
2008-01-04
2008-01-05
2008-01-06
2008-01-07
2008-01-08
2008-01-09
2008-01-10
2008-01-11
2008-01-12
2008-01-13
2008-01-14
2008-01-15
2008-01-16
2008-01-17
2008-01-18
2008-01-19
2008-01-20
2008-01-21
2008-01-22
2008-01-23
2008-01-24
2008-01-25
2008-01-26
2008-01-27
2008-01-28
2008-01-29
2008-01-30
2008-01-31
2008-02-01
*/
  相关解决方案