Sql查询距离指定日期最近日期的一条数据

如题:如下三个日期,查询在2008-12-20日之前或者是之后(注意是之前或者之后,反正就是距离它最近日期的一条记录,肯定只有一条)(即2008-12-15)应该怎样写?
1 2008-12-01
2 2008-12-15
3 2008-12-31

不同数据库有不同的写法,不过思路是一样的,就是字段的日期形式减去2008-12-20,然后取绝对值的最小值。找到这个最小值就可以了。
枚举2个数据库的写法
MS SQL SERVER,
select * from table_name
where abs(column_name-convert(datetime,'20081220',112)) in (
select min(abs(column_name-convert(datetime,'20081220',112))) from table_name)

ORACLE
select * from table_name
where abs(column_name-to_date('20081220','yyyymmdd')) in (
select min(abs(column_name-to_date('20081220','yyyymmdd'))) from
table_name
)

注:column_name字段需要时日期类型,如果不是需要做转换
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-05-08
select top 1 * from table where order by abs(datediff(d,日期列,'2008-12-20')) asc
相似回答