按身份证提取60周岁的人员

数据库: twt001

数据表: tiqu60

我想查询出以现在的当前月为准,截至上月份,男满60周岁,女满55周岁以的人
比如第1条记录,身份证中的出生年月为195411,以现在的时间2014年12月为准,截至上月正好60周岁,则满足查询条件,而第二条记录不是我们想要的,则只在有下月的时候才能查询出来。同样满足55周岁的女性还有第四条记录),如何写查询查出第一条和第三条这样的记录呢?
以下是查询语句:

use twt001
select * from tiqu60

SELECT * FROM tiqu60 
WHERE (SUBSTRING(sfzhm,7,6)=substring((CONVERT(VARCHAR(10),DATEADD(yy,-60,GETDATE()),112)),1,6) AND xb='男') OR 
      (SUBSTRING(sfzhm,7,6)=substring((CONVERT(VARCHAR(10),DATEADD(yy,-55,GETDATE()),112)),1,6) AND xb='女')

运行结果如下:

按身份证提取60周岁的人员_第1张图片

 

上面的查询是以年为增减单位的,也可以改以月为单位的查询,则要更改DATEADD函数:

DATEADD(mm,-720,GETDATE()),112),720个月正好是60年

上面的查询稍有不完美的地方:查询是到当月满60周岁,如果要查询截至上月满60周岁则要再减一个月,修改如下:DATEADD(mm,-721,GETDATE()),112)

完整的语句如下:

use twt001
select * from tiqu60

SELECT * FROM tiqu60 
WHERE (SUBSTRING(sfzhm,7,6)=substring((CONVERT(VARCHAR(10),DATEADD(mm,-721,GETDATE()),112)),1,6) AND xb='男') OR 
      (SUBSTRING(sfzhm,7,6)=substring((CONVERT(VARCHAR(10),DATEADD(mm,-661,GETDATE()),112)),1,6) AND xb='女')

按身份证提取60周岁的人员_第2张图片

我们可以看出至截至2014年11月份,男满60周岁,女满55周岁的人查询了出来


 

语句分析:

substring((CONVERT(VARCHAR(10),DATEADD(yy,-60,GETDATE()),112)),1,6) 

DATEADD(yy,-60,GETDATE()),将当年日期减去60年

CONVERT(VARCHAR(10),DATEADD(mm,-721,GETDATE()),112),减60年的日期以yymmdd格式输出195412XX

substring从195412XX提取195412

你可能感兴趣的:(数据库操作)