Ⅰ sql server 2005查询范围越小越慢
这种情况和sqlserver优化利用的索引有关。
在你的sql语句中,应该是有多个索引字段,而且其中一个返世行索引是时间。
当时间范围较大时(示例中的1月1日到10月31日),返樱sqlserver认为时间范围较大,采用了其他索引字段,而恰巧这个索引在本次查询效率较高。
当时间范围缩小时(示例中的10月1日到10月31日),sqlserver认为时间范围较小,采漏哗用了时间索引字段,而恰巧时间索引在本次查询效率较慢。
如果你的sql加上强制使用其他索引,就能发现,即使缩小时间范围,也没有问题:
select * from [table_name] with (NoLock,Index = [index_name]) where ......
-----by 谊信 www.shyxit.com
Ⅱ sqlserver的数据类型
sqlserver的数据类型比较多,常用的包括:
第一大类:整数数据
bit:bit数据类型代表0,1或NULL,就是表示true,false.占用1byte.
int:以4个字节来存储正负数.可存储范围为:-2^31至2^31-1.
smallint:以2个字节来存储正负数.存储范围为:-2^15至2^15-1
tinyint: 是最小的整数类型,仅用1字节,范围:0至此^8-1
第二大类:精确数值数据
numeric:表示的数字可以达到38位,存储数据时所用的字节数目会随着使用权用位数的多少变化.
decimal:和numeric差不多
第三大类:近似浮点数值数据
float:用8个字节来存储数据.最多可为53位.范围为:-1.79E+308至1.79E+308.
real:位数为24,用4个字节,数字范围:-3.04E+38至3.04E+38
第四大类:日期时间数据
datatime:表示时间范围可以表示从1753/1/1至9999/12/31,时间可以表示到3.33/1000秒.使用8个字节.
smalldatetime:表示时间范围可以表示从1900/1/1至2079/12/31.使用4个字节.
第五大类:字符串数据
char:长度是设定的,最短为1字节,最长为8000个字节.不足的长度会用空白补上.
varchar:长度也是设定的,最短为1字节,最长为8000个字节,尾部的空白会去掉.
text:长宽也是设定的,最长可以存放2G的数据.
第六大类:Unincode字符串数据
nchar:长度是设定的,最短为1字节,最长为4000个字节.不足的长度会用空白补上.储存一个字符需要2个字节.
nvarchar:长度是设定的,最短为1字节,最长为4000个字节.尾部的空白会去掉.储存一个字符需要2个字节.
ntext:长度是设定的,最短为1字节,最长为2G.尾部的空白会去掉,储存一个字符需要2个字节.
第七大类:货币数据类型
money:记录金额范围为:-92233720368577.5808至92233720368577.5807.需要8 个字节.
smallmoney:记录金额范围为:-214748.3648至214748.36487.需要4个字节.
第八大类:标记数据
timestamp:该数据类型在每一个表中是唯一的!当表中的一个记录更改时,该记录的timestamp字段会自动更新.
uniqueidentifier:用于识别数据库里面许多个表的唯一一个记录.
第九大类:二进制码字符串数据
binary:固定长度的二进制码字符串字段,最短为1,最长为8000.
varbinary:与binary差异为数据尾部是00时,varbinary会将其去掉
image:为可变长度的二进制码字符串,最长2G.
Ⅲ SqlServer报表服务根据时间范围查询,不是一页一页的翻
select * from 表名 where date>=''and date<=''
Ⅳ SQLSERVER语句怎么查询一个时间段的数据
select * from 表 where 日期字段>='开始日期' and 日期字段<='截止日期'
and convert(char(8),日期字段,108)>='开始时间' and convert(char(8),日期余顷世字段,108)<='截止时乎陵间'
例如:
select * from tb1 where dDate>='2010-11-05' and dDate<='竖肢2010-11-15'
and convert(char(8),dDate,108)>='22:30:00' and convert(char(8),dDate,108)<='23:00:00'
Ⅳ sqlserver中datetime类型字段的取值范围是多少
·datetime
数据类型存储从 1753 年 1 月 1 日至 9999 年 12 月 31 日的日期。
每个数值要求 8 个字节的存储空间。
·smalldatetime
数据类型存储从 1900 年 1 月 1 日至 2079 年 6 月 6 日的日期。
每个数值要求 4 个字节的存储空间。
关于更多的数据类型请看 http://blog.csdn.net/feixianxxx/archive/2009/07/29/4391312.aspx
Ⅵ SQLSERVER特定时间段查询
DECLARE @dt DATETIME
DECLARE @dt2 DATETIME
SET @dt = '2008-07-24'
SET @dt2 = DATEADD(day, 1, @dt)
select @dt as dt, @dt2 as dt2
select * from meet_now where meetdate between CONVERT(datetime , @dt, 111 ) and convert(datetime , @dt2, 111 ) order by id
select * from meet_now where DATEDIFF(day, meetdate, @dt) = 0 order by id
Ⅶ sql server 日期范围查询
SELECT * FROM 表明 WHERE 日期字段名 BETWEEN '20130101' AND '20130130'
或者:
SELECT * FROM 表明 WHERE 日期字段名 BETWEEN CONVERT(datetime,'2013-01-01',120) AND CONVERT(datetime,'2013-01-30',120)
(7)sqlserver时间范围扩展阅读:
注意事项
在写按时间段查询的sql语句的时候 一般我们会这么写查询条件:
where date>='2010-01-01' and date<='2010-10-1'。
但是在实执行Sql时些语句会转换成这样:
where date>='2010-01-01 0:00:00' and date<='2010-10-1:0:00:00',再看这个条件的话,就会有些明白,那就是'2010-10-1 0:00:00' 之后的数据例如('2010-10-1:08:25:00')查不到,也就是说2010-10-1的数据查不到。
修改查询条件为:
where date>='2010-01-01' and date<='2010-10-1 23:59:59' 或 where date>='2010-01-01' and date<='2010-10-2'。
某个表某个字段是Datetime型 以"YYYY-MM-DD 00:00:00" 存放
Ⅷ sqlserver时间范围查询问题
如果这种也出来了,你可以这么写year(dt)=2015 and month(dt)=8 and day(dt)=1就可以了。是没遇到过你这种情况。
Ⅸ SQL Server 中 关于时间 类型的区别
1、首先获取当前系统数据库的日期和时间,可以利用函数GETDATE(),select GETDATE();如下图所示。
Ⅹ sqlserver 包含一个时间区间的存储过程如何写
create PROCEDURE ps_test
declare @id varchar(50)
as
begin
declare @from_date datetime
declare @to_date datetime
create table #tt_table (id,output_date)
select @from_date = 开始时间, @to_date = 结束袭孙橡销时间拍如链
from A
where id = @id
while(@from_date <= @to_date)
begin
insert into #tt_table(id,output_date)
values( @id,@from_date)
DATEADD(day,1,@from_date)
end
select id, output_date
from #tt_table
end
go