SQL日期查询中的典型问题
2008-11-29 14:54
489 查看
典型问题:
数据表news中有id,title,adddate等字段,并且拥有2005年6月1日至30日数据,每天都有记录,但我在用以下SQL语言句查询时,发现问题:
sql查询语句为:select * from news where adddate>='2005-6-16' and adddate <='2005-6-17'时,返回的结果只有2005-6-16的记录,却没有2005-6-17的记录;
原因:DateTime型含有时:分:秒数值
select * from news where adddate>='2005-6-16' and adddate <='2005-6-17'
在默认情况下等于
select * from news where adddate>='2005-6-16 00:00:00' and adddate <='2005-6-17 00:00:00'
如果只指定日期,则时间默认为 12:00 AM(午夜)。
解决:
应该这样查询
select * from news where adddate>='2005-6-16 00:00:00' and adddate <='2005-6-17 23:59:59'
或者
select * from news where convert(varchar(10),adddate,120)>='2005-6-16' and convert(varchar(10),adddate,120)<='2005-6-17'
或者
select * from news where convert(varchar(10),adddate,120) between '2005-6-16' and '2005-6-17'
典型问题:
SELECT * FROM Orders WHERE (OrderDate BETWEEN '1996 - 8 - 1' AND '1996 - 8 - 10')
如果OrderDate是DateTime类型,则结果正确;如果是char类型(有些数据库会用程序将 DateTime类型数据转换成yyyy-MM-dd格式的char类型保存到数据库中)则不正确.
必须保证日和月都为2位,不足者在前面加0,查询如下,可得正确结果:
SELECT *
FROM AtdRecord
WHERE (RecDate BETWEEN '2008-11-01' AND '2008-11-30')
在C#中可用如下方法构造查询字符串
DateTime dateS = dtpS.Value.Date,dateE=dtpE.Value.Date; // dtpS为时间控件dateTimepicker
string sqlstr = "select * from AtdRecord WHERE (RecDate BETWEEN '" + dateS.ToString("u").Substring(0, 10) + "' AND '" + dateE.ToString("u").Substring(0, 10) + "') ORDER BY RecDate";
数据表news中有id,title,adddate等字段,并且拥有2005年6月1日至30日数据,每天都有记录,但我在用以下SQL语言句查询时,发现问题:
sql查询语句为:select * from news where adddate>='2005-6-16' and adddate <='2005-6-17'时,返回的结果只有2005-6-16的记录,却没有2005-6-17的记录;
原因:DateTime型含有时:分:秒数值
select * from news where adddate>='2005-6-16' and adddate <='2005-6-17'
在默认情况下等于
select * from news where adddate>='2005-6-16 00:00:00' and adddate <='2005-6-17 00:00:00'
如果只指定日期,则时间默认为 12:00 AM(午夜)。
解决:
应该这样查询
select * from news where adddate>='2005-6-16 00:00:00' and adddate <='2005-6-17 23:59:59'
或者
select * from news where convert(varchar(10),adddate,120)>='2005-6-16' and convert(varchar(10),adddate,120)<='2005-6-17'
或者
select * from news where convert(varchar(10),adddate,120) between '2005-6-16' and '2005-6-17'
典型问题:
SELECT * FROM Orders WHERE (OrderDate BETWEEN '1996 - 8 - 1' AND '1996 - 8 - 10')
如果OrderDate是DateTime类型,则结果正确;如果是char类型(有些数据库会用程序将 DateTime类型数据转换成yyyy-MM-dd格式的char类型保存到数据库中)则不正确.
必须保证日和月都为2位,不足者在前面加0,查询如下,可得正确结果:
SELECT *
FROM AtdRecord
WHERE (RecDate BETWEEN '2008-11-01' AND '2008-11-30')
在C#中可用如下方法构造查询字符串
DateTime dateS = dtpS.Value.Date,dateE=dtpE.Value.Date; // dtpS为时间控件dateTimepicker
string sqlstr = "select * from AtdRecord WHERE (RecDate BETWEEN '" + dateS.ToString("u").Substring(0, 10) + "' AND '" + dateE.ToString("u").Substring(0, 10) + "') ORDER BY RecDate";
相关文章推荐
- SQL日期查询中的典型问题
- sql日期查询问题
- SQL查询日期的问题
- 关于SQL中Between语句查询日期的问题
- 关于SQL中Between语句查询日期的问题
- PL/SQL 按日期查询问题
- 典型通过日期查询SQL
- [转]关于SQL中Between语句查询日期的问题
- Oracle sql语句查询日期字段没有时分秒问题
- SQL查询日期的问题
- sql日期查询问题
- SQL Server case when 日期字符串转换 多表查询 嵌套子查询
- T-SQL根据日期条件查询,不考虑时间
- sql表查询某一字段为空的记录的问题
- sql日期查询 中文格式转换
- hql和sql区别(在学习hibernate查询时候遇到的问题)
- 使用sql语句查询日期在一周内的数据
- SQL 日期查询
- 在论坛中出现的比较难的sql问题:2(row_number函数+子查询)
- 在论坛中出现的比较难的sql问题:4(row_number函数+子查询2)