请问下面的SQL问题出现在什么地方? ( 积分: 100 )

  • 主题发起人 主题发起人 wyj1974
  • 开始时间 开始时间
W

wyj1974

Unregistered / Unconfirmed
GUEST, unregistred user!
ACCESS数据库,tb_person_info是人员信息表,BirthDay是字符串生日字段,现要求能检索出今天及后面5天过生日的人员清单:<br>select&nbsp;UName,BirthDay,Sex,UPhone&nbsp;from<br>&nbsp;&nbsp;(select&nbsp;*&nbsp;from&nbsp;tb_person_info<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where&nbsp;(rtrim(ltrim(BirthDay))&lt;&gt;'年&nbsp;&nbsp;月&nbsp;&nbsp;日')&nbsp;)&nbsp;a<br>where&nbsp;&nbsp;((DateAdd('yyyy',DatePart('yyyy',date())-DatePart('yyyy',a.BirthDay),a.BirthDay)-date())&nbsp;between&nbsp;0&nbsp;and&nbsp;5)&nbsp;---查看今年过生日的<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;((DateAdd('yyyy',DatePart('yyyy',date()+5)-DatePart('yyyy',a.BirthDay),a.BirthDay)-date())&nbsp;between&nbsp;0&nbsp;and&nbsp;5)<br>---查看跨年的<br>但执行的时候,老是报标准表达式中数据类型不匹配,如果把下面两个条件分开执行没有问题。
 
那就分开union吧
 
一句SQL也可以,只不过服务器的运算会多些:<br>select&nbsp;*&nbsp;from&nbsp;tb_person_info&nbsp;where&nbsp;dateadd(year,datepart(year,'2007-7-5')-datepart(year,BirthDay),BirthDay)&nbsp;between&nbsp;'2007-7-5'&nbsp;and&nbsp;dateadd(day,5,'2007-7-5')<br>将‘2007-7-5’改成要查的日期或者当天就可以了,不用担心
 
declare&nbsp;@d&nbsp;datetime<br>set&nbsp;@d='2007-7-5'<br>select&nbsp;*&nbsp;from&nbsp;employee<br> where&nbsp;dateadd(year,datepart(year,@d)-datepart(year,born_date),born_date)&nbsp;between&nbsp;@d&nbsp;and&nbsp;dateadd(day,5,@d)<br> or&nbsp;dateadd(year,datepart(year,@d)-datepart(year,born_date)+1,born_date)&nbsp;between&nbsp;@d&nbsp;and&nbsp;dateadd(day,5,@d)<br>处理了跨年的情况。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
I
回复
0
查看
746
import
I
I
回复
0
查看
775
import
I
后退
顶部