您的位置:首页 > 数据库

简洁的实现数据库中年月区间查询

2007-10-30 18:04 155 查看

简洁的实现数据库中年月区间查询

做项目的时候经常会出现这样的问题 XX年XX月 -- XX年XX月.而且在数据库中是分开存储年和月这两个字段的,在组装SQL语句的时候是极其痛苦的(先判断年的大小,然后再判断月份的大小,年份相等了如何,不相等了又如何).而且也特别爱出错.我也因此而痛苦过几天.最后想出了一个比较简洁的解决办法.

要想非常简洁的解决这个问题,无非是把这两个字段放到一起组合成日期,然后利用数据库提供的日期大小比较来实现我们的目的.看到这里您可能明白了.那么究竟如何来将年和月组装在一起呢.SQL Server提供了cast函数(想了解的详细一点可以查看sql的帮助,在这里就不赘述了.cast转换日期必须是XXXX-XX-XX或者是XX-XX-XX当然还可以带上小时分秒毫秒,要带就带全了否则就别带,要不会出错的.

假如数据库中对应的两个字段是Year(int),Month(int).那么我们可以这样来写查询语句(StartDate和EndDate是我们在C#代码中就将年和月组合在一起转换成DateTime类型了.注意between前面的'-1')),这是为了进行类型转换成功而添加的一个冗余值,不会对实际的结果产生任何影响,而且如果去掉它会差生语法错误的,并且年月日之间只能用半角的 - (横杠)来连接.这样虽然不能提高效率,但是却能极大的精简我们的代码,并且减少错误发生的几率.希望能给朋友们一些启发和帮助


select *


from temp


where


cast(cast(Year as nvarchar(10)) + '-' + cast(Month as nvarchar(10)) + '-1') as smallDatetime)


between StartDate and EndDate
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: