VFP

smartfan 2012-10-20 10:33:31
b1=1993/01/01
b2=1999/06/30
表1
a1,a2,a3
张三,1992/05/01,1999/02/28
李四,1997/01/01,2000/05/28
张三,1999/05/01,2009/12/30


如何找出在B1,B2时间段的人员
例如:
a1,a2,a3
张三,1993/01/01,1999/02/28
李四,1997/01/01,1999/06/30
张三,1999/05/01,1999/06/30
...全文
182 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2012-10-23
  • 打赏
  • 举报
回复
*-- vfp9.0

Set Century On
Set Date YMD
Set Mark To '/'
Create Cursor 表1 (a1 C(10),a2 D,a3 D)
Insert Into 表1 Values ('张三',{^1992/05/01},{^1999/02/28})
Insert Into 表1 Values ('李四',{^1997/01/01},{^2000/05/28})
Insert Into 表1 Values ('张三',{^1999/05/01},{^2009/12/30})
Insert Into 表1 Values ('王五',{^1990/01/01},{})
Insert Into 表1 Values ('赵六',{},{^2000/05/02})
Insert Into 表1 Values ('于七',{},{})
Browse Title "原始数据"
*------------------------------------------
b1={^1999/05/01}
b2={^1999/06/30}
Select a1,Iif(Between(b1,a2,a3) Or Empty(a2),b1,a2) a2,Iif(Between(b2,a2,a3) Or Empty(a3),b2,a3) a3 From 表1 ;
Where ((b1 Between Evl(a2,{^0001/01/01}) And Evl(a3,{^9999/01/01})) Or (b2 Between Evl(a2,{^0001/01/01}) And Evl(a3,{^9999/01/01})) Or (b1<=Evl(a2,{^0001/01/01}) And b2>=Evl(a3,{^9999/01/01})))
十豆三 2012-10-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
还有一个问题,如果有一个a3为空的话,那怎么办?a3为空也应该在b1,b2范围内~[/Quote]
能把需求一次描述清楚吗?并把例子举全了。不然效率很低的。
a2会不会有空的,a2、a3会不会都有空的。
空的以最大日期算,还是什么?这些都是规则,要说清楚。
smartfan 2012-10-22
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
加个 Where 即可:
Select a1,Iif(Between(b1,a2,a3),b1,a2) a2,Iif(Between(b2,a2,a3),b2,a3) a3 From 表1 Where ((b1 Between a2 And a3) Or (b2 Between a2 And a3) Or (b1<=a2 And b2>=a3))
[/Quote]

还有一个问题,如果有一个a3为空的话,那怎么办?a3为空也应该在b1,b2范围内~
smartfan 2012-10-22
  • 打赏
  • 举报
回复
b1=1993/01/01
b2=1999/06/30
表1
a1,a2,a3
张三,1992/05/01,1999/02/28
李四,1997/01/01,2000/05/28
张三,1999/05/01,2009/12/30
王五,1990/01/01,为空

如何找出在B1,B2时间段的人员
结果如下:
a1,a2,a3
张三,1993/01/01,1999/02/28
李四,1997/01/01,1999/06/30
张三,1999/05/01,1999/06/30
王五,1993/01/01,1999/06/30

就是表1中a2,a3要在b1,b2的时间段内;a2,a3为空或超出B1,B2时间段,以b1,b2的时间修改掉 a2,a3 。
十豆三 2012-10-22
  • 打赏
  • 举报
回复
加个 Where 即可:
Select a1,Iif(Between(b1,a2,a3),b1,a2) a2,Iif(Between(b2,a2,a3),b2,a3) a3 From 表1 Where ((b1 Between a2 And a3) Or (b2 Between a2 And a3) Or (b1<=a2 And b2>=a3))
smartfan 2012-10-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
SQL code
*-- vfp9.0

Set Century On
Set Date YMD
Set Mark To '/'
Create Cursor 表1 (a1 C(10),a2 D,a3 D)
Insert Into 表1 Values ('张三',{^1992/05/01},{^1999/02/28})
Insert Into 表1 Values ('李四',{^19……
[/Quote]

还是有点问题~ 如果把B1改成1999/05/01,就出问题了,第一个张三应该不在查询范围内
十豆三 2012-10-20
  • 打赏
  • 举报
回复
*-- vfp9.0

Set Century On
Set Date YMD
Set Mark To '/'
Create Cursor 表1 (a1 C(10),a2 D,a3 D)
Insert Into 表1 Values ('张三',{^1992/05/01},{^1999/02/28})
Insert Into 表1 Values ('李四',{^1997/01/01},{^2000/05/28})
Insert Into 表1 Values ('张三',{^1999/05/01},{^2009/12/30})
Browse Title "原始数据"
*------------------------------------------
b1={^1993/01/01}
b2={^1999/06/30}
Select a1,Iif(Between(b1,a2,a3),b1,a2) a2,Iif(Between(b2,a2,a3),b2,a3) a3 From 表1
smartfan 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
引用 2 楼 的回复:
不会吧~~这么清楚


既然是求b1,b2之间的数据
是根据哪个求的? a2?a3?还是a2,a3都在b1b2之间

还有
李四,1997/01/01,1999/06/30
张三,1999/05/01,1999/06/30
结果怎么变化了呢

李四和张三的a3数据都变成1999/06/30了
[/Quote]
因为李四和张三的a3数据没有在B1,B2之间~~~
smartfan 2012-10-20
  • 打赏
  • 举报
回复
b1=1993/01/01
b2=1999/06/30
表1
a1,a2,a3
张三,1992/05/01,1999/02/28
李四,1997/01/01,2000/05/28
张三,1999/05/01,2009/12/30


如何找出在B1,B2时间段的人员
结果如下:
a1,a2,a3
张三,1993/01/01,1999/02/28
李四,1997/01/01,1999/06/30
张三,1999/05/01,1999/06/30

结果a2,a3在B1,B2之间。a2大于b1,a2就等于b1。

说简单点就是求交集~



十豆三 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 3 楼 的回复:
SQL code
Select * From 表1 Where ((b1 Between a2 And a3) Or (b2 Between a2 And a3) Or (b1<=a2 And b2>=a3))


豆老师 周六上班么
[/Quote]YES
taohua300 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
SQL code
Select * From 表1 Where ((b1 Between a2 And a3) Or (b2 Between a2 And a3) Or (b1<=a2 And b2>=a3))
[/Quote]

豆老师 周六上班么
taohua300 2012-10-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
不会吧~~这么清楚
[/Quote]

既然是求b1,b2之间的数据
是根据哪个求的? a2?a3?还是a2,a3都在b1b2之间

还有
李四,1997/01/01,1999/06/30
张三,1999/05/01,1999/06/30
结果怎么变化了呢

李四和张三的a3数据都变成1999/06/30了
十豆三 2012-10-20
  • 打赏
  • 举报
回复
Select * From 表1 Where ((b1 Between a2 And a3) Or (b2 Between a2 And a3) Or (b1<=a2 And b2>=a3))
smartfan 2012-10-20
  • 打赏
  • 举报
回复
不会吧~~这么清楚
taohua300 2012-10-20
  • 打赏
  • 举报
回复
看不懂

2,749

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧