| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 549 人关注过本帖
标题:2个日期对比查询的问题
只看楼主 加入收藏
averting
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-6-9
收藏
 问题点数:0 回复次数:2 
2个日期对比查询的问题

应用场景:
工程确定计划竣工时间后,必须在3个工作日内完成.质检部门检查工程部门是否在延期,

假设
计划竣工时间 为 '2006-8-10'
实际竣工时间 为 计划竣工时间 + 3个工作日 = '2006-8-15' (12,13为双休日,11,14,15工作日)
检查时间 为 '2006-8-14'

这时候
实际竣工时间 > 检查时间
应该处罚

脚本
create table 竣工
(
项目编号 varchar(30),
计划竣工时间 datetime

)
go

create table 检查
(
项目编号 varchar(30),
检查时间 datetime

)
go

insert into 竣工 values('a1001','2006-08-10')
insert into 竣工 values('a1002','2006-08-08')

insert into 检查 values('a1001','2006-08-13')
insert into 检查 values('a1002','2006-08-11')

得到以下结果
项目编号 a1001
计划竣工时间 '2006-08-10'
实际竣工时间 '2006-08-15'
检查时间 '2006-08-13'
处罚是否 是

项目编号 a1002
计划竣工时间 '2006-08-18'
实际竣工时间 '2006-08-11'
检查时间 '2006-08-11'
处罚是否 否


搜索更多相关主题的帖子: 查询 
2006-08-17 13:36
LouisXIV
Rank: 6Rank: 6
等 级:贵宾
威 望:25
帖 子:789
专家分:0
注 册:2006-1-5
收藏
得分:0 
用Join和Case

显示问题自己在前台解决,SQL不是用来出报表的

2006-08-17 19:52
潇洒老乌龟
Rank: 5Rank: 5
等 级:贵宾
威 望:18
帖 子:407
专家分:0
注 册:2005-12-13
收藏
得分:0 

SQL SERVER中对日期字段值的比较

作者:袁华慧

sql server中对日期字段的比较方式有多种,介绍几种常用的方式:
用northwind库中的employees表作为用例表。
1、between...and语句的使用:
说明:between...and用于指定测试范围
看以下实例:
执行sql语句“SELECT hiredate FROM employees”显示结果如下:
hiredate
1992-05-01 00:00:00.000
1992-08-14 00:00:00.000
1992-04-01 00:00:00.000
1993-05-03 00:00:00.000
1993-10-17 00:00:00.000
1993-10-17 00:00:00.000
1994-01-02 00:00:00.000
1994-03-05 00:00:00.000
1994-11-15 00:00:00.000

从以上结果集中搜索出hiredate在"1993-10-17"到"1994-01-02"的记录,则sql语句如下:
SELECT hiredate
FROM employees
WHERE hiredate between cast('1993-10-17' as datetime) and cast('1994-01-02' as datetime)
执行该语句后结果如下:
hiredate
1993-10-17 00:00:00.000
1993-10-17 00:00:00.000
1994-01-02 00:00:00.000
以上sql语句中出现between...and和cast,其中cast是类型转换函数:在该例中将字符串转换成日期型值.
在WHERE中用between...and把"1993-10-17"到"1994-01-02"的记录搜索出来.

2、两个日期值的比较大小可以用 >=运算符,和datediff函数
datediff函数:DATEDIFF ( datepart , startdate , enddate )
datepart的取值可以是year,quarter,Month,dayofyear,Day,Week,Hour,minute,second,millisecond
startdate 是从 enddate 减去。如果 startdate 比 enddate 晚,返回负值。
看以下实例:
搜索hiredate的值在"1993-05-03"后的记录,该sql语句如下:
SELECT hiredate
FROM employees
WHERE datediff(day,cast('1993-05-03' as datetime),hiredate) >0
执行该语句后结果如下:
hiredate
1993-10-17 00:00:00.000
1993-10-17 00:00:00.000
1994-01-02 00:00:00.000
1994-03-05 00:00:00.000
1994-11-15 00:00:00.000
因此datediff(day,cast('1993-05-03' as datetime),hiredate)是把hiredate的值按"day"减去cast('1993-05-03' as datetime)的值.通过判定相减后值的正负来判定日期的先后。


乌龟学堂http://www. 承接各种软件开发、系统集成、网络搭建。 QQ:124030710
2006-08-17 22:03
快速回复:2个日期对比查询的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028858 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved