|  | 主题:  选取一个时间段内的记录,sql要怎么写?有那些写法? | 
            
                        
                
                    |  天儿呀
 职务:普通成员
 等级:1
 金币:0.0
 发贴:97
 注册:2001/12/13 15:35:54
 
 | 
                            
                            #12005/1/26 16:39:26 
                                选取一个时间段内的记录,sql要怎么写?有那些写法?SELECT * from table_operation where datediff(y,operation_date,开始日期)>=0  and datediff(y,operation_date,终止日期)>=0ORDER BY operation_date DESC
 但是这样好像不行阿,大家讨论一下!
 | 
                        
                
                    |  浮尘
 职务:普通成员
 等级:3
 金币:7.0
 发贴:1258
 注册:2001/11/19 12:41:09
 
 | 
                            
                            #22005/1/26 17:26:51 
                                DateDiff()函数使用的有问题吧,去查一下联机丛书。
                                
                                
                                
                             | 
                        
                
                    |  浮尘
 职务:普通成员
 等级:3
 金币:7.0
 发贴:1258
 注册:2001/11/19 12:41:09
 
 | 
                            
                            #32005/1/26 17:27:57 
                                DATEDIFF返回跨两个指定日期的日期和时间边界数。
 
 语法
 DATEDIFF ( datepart , startdate , enddate )
 
 参数
 datepart
 
 是规定了应在日期的哪一部分计算差额的参数。下表列出了 Microsoft® SQL Server™ 识别的日期部分和缩写。
 
 日期部分 缩写
 year yy, yyyy
 quarter qq, q
 Month mm, m
 dayofyear dy, y
 Day dd, d
 Week wk, ww
 Hour hh
 minute mi, n
 second ss, s
 millisecond ms
 
 
 startdate
 
 是计算的开始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。
 
 因为 smalldatetime 只精确到分钟,所以当用 smalldatetime 值时,秒和毫秒总是 0。
 
 如果您只指定年份的最后两位数字,则小于或等于"两位数年份截止期"配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果 two digit year cutoff 为 2049(默认),则 49 被解释为 2049,2050 被解释为 1950。为避免模糊,请使用四位数的年份。
 
 有关时间值指定的更多信息,请参见时间格式。有关日期指定的更多信息,请参见 datetime 和 smalldatetime。
 
 enddate
 
 是计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。
 
 返回类型
 integer
 
 注释
 startdate 是从 enddate 减去。如果 startdate 比 enddate 晚,返回负值。
 
 当结果超出整数值范围,DATEDIFF 产生错误。对于毫秒,最大数是 24 天 20 小时 31 分钟零 23.647 秒。对于秒,最大数是 68 年。
 
 计算跨分钟、秒和毫秒这些边界的方法,使得 DATEDIFF 给出的结果在全部数据类型中是一致的。结果是带正负号的整数值,其等于跨第一个和第二个日期间的 datepart 边界数。例如,在 1 月 4 日(星期日)和 1 月 11 日(星期日)之间的星期数是 1。
 
 示例
 此示例确定在 pubs 数据库中标题发布日期和当前日期间的天数。
 
 USE pubs
 GO
 SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
 FROM titles
 GO
 | 
                        
                
                    |  Aleuxander
 职务:普通成员
 等级:1
 金币:1.0
 发贴:20
 注册:2004/12/20 17:24:52
 
 | 
                            
                            #42005/1/26 18:38:43 
                                我一般是用一个自己写的函数把开始日期、结束日期和数据库内相应字段的值转化为"yyyy-mm-dd"形式的文本格式,然后简单地用">" 和 "<"比较。
                                
                                
                                
                             | 
                        
                
                    |  majunant
 职务:普通成员
 等级:1
 金币:1.0
 发贴:37
 注册:2001/10/8 3:35:52
 
 | 
                            
                            #52005/1/27 9:49:41 
                                用between应该也可以吧?
                                
                                
                                
                             | 
                        
                
                    |  蓝鲸
 职务:版主
 等级:5
 金币:42.1
 发贴:2614
 注册:2001/12/20 15:57:57
 
 | 
                            
                            #62005/1/27 10:19:51 
                                可以用between,而且很方便如BETWEEN '2005-1-18' AND '2005-1-25'
 BETWEEN #2005-1-18# AND #2005-1-25#(ACCESS)
 非常大鱼 |