select * from xx where datediff(week , getdate() , datename(yy,getdate()) + right(convert(varchar(10),birthday,120),6)) = 0
创新互联公司-专业网站定制、快速模板网站建设、高性价比湖南网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式湖南网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖湖南地区。费用合理售后完善,十年实体公司更值得信赖。
select * from info where to_date(birthdate,'YYYY-MM-DD') between sysdate and sysdate+7;
to_date(birthdate,'YYYY-MM-DD')
里边的'YYYY-MM-DD' 取决于你字符型数据的格式
如果是20100729 那么你就要改成'YYYYMMDD',其他格式你也照着改就行
这个办法很多,如果是比较精确的可以用month_between函数,然后除以12,最后在trunc这样就能得到具体的年龄了。
比如trunc(month_between(sysdate,时间类型的生日字段)/12)
个人感觉这个精确一些,能精确到天,只要还没过生日,那么就不会加一岁。
当然二者直接相减trunc((sysdate-时间类型的生日字段)/365)也可以。
sysdate-时间类型的生日字段,这么相减默认出现的是相差的天数,所以除以365。这个也可以,不过有些年是366天,不过因为366天的年分比较少,所以基本上不会相差很多。只是会出现,“提前”的情况。不过80年最多才21天(大概是这样,我没细算,就算四年一次),所以对实际影响不是特别大。如果要求准确那么还是上面的靠谱一些。
用函数取出字段年,然后用现在的年相减也可以。这个就是一个大概(个人认为更加不靠谱),比如一个人2050年12月30日出生,现在是2055年后的1月1号,那么按照年来说就是5,但是其实才4岁多一点,所以年这个只是一个大概的,不会十分准确。
select floor(MONTHS_BETWEEN(sysdate,date'2000-1-1')/12) from dual
把12后面的那个1去掉就好了
select to_date(substr('XXXXXXXXXXXXXXXXX',7,8),'YYYYMMDD') from dual
XXXXXXXXXXXXXXXXX 为身份证号码