SQL Server中查询结果超出了查询时间范围解决方法

废话少说,直接上SQL代码,下边那几个查询语句为啥将二零一零-11-27的笔录查询出来了呢?那一个是同事碰到的四个难题,个人安插了叁个事例。

一、T-SQL概述

SQL
Server用于操作数据库的编制程序语言为Transaction-SQL,简单称谓T-SQL。T-SQL与PL/SQL分歧,并从未一定的程序构造。
  T-SQL蕴涵以下4个部分:

  • DDL:定义和拘禁数据库及其对象,比方create、alter和drop等。
  • DML:实现对数据库表各指标的操作,举例insert、update等。
  • DCL:数据调控语言,实现对数据库举行安全治本和权杖管理等调节,举例grant、revoke、deny等。
  • 叠合的言语成分。T-SQL的附加语言因素,富含变量、运算符、函数、注释和流程序调节制语句等。

在T-SQL中,命令和说话的书写是不区分轻重缓急写的。

USE AdventureWorks2014;GOSELECT * FROM [Person].[Person]WHERE ModifiedDate = '2008-11-26 00:00:00:000' AND ModifiedDate = '2008-11-26 23:59:59.999'

二、T-SQL编制程序根基

事实上只要细看过文档的话,应该明白是哪些原因,因为数据类型Datetiem的时刻范围:00:00:00
到 23:59:59.997 , 末了部分的节制为0
~997,官方文书档案指示,datetime的秒的小数部分精度的有舍入,具体请见上面

1、标识符

①T-SQL平整标志符

  • 由字母、数字、下划线、@、#、$符号组成,在那之中字母能够是a-z或A-Z,也足以是来自此外语言的字母字符。
  • 首字符无法为数字和$。
  • 标记符不相同意是T-SQL保留字。
  • 标志符内不容许有空格和特殊字符
  • 长度小于128

②范围标记符
  对于不相符标记符准绳的标记符,则要采纳约束符方括号([]卡塔尔或双引号(“”卡塔尔国将标志符括起来。如标记符[My
Table]、“select”内独家选拔了空格和保留字select。

datetime 秒的小数部分精度的舍入

2、数据类型

在SQL
Server中提供了四种系统数据类型。除了系统数据类型外,还足以自定义数据类型。

①系列数据类型

(1卡塔尔(قطر‎正确数字数据类型

  • int
      存款和储蓄整型数值,存款和储蓄数值范围为-231~231-1。
  • bigint
      bigint比int能储存更加大的数值,存款和储蓄数值范围为-263~263-1。
  • smallint
      数据类型的界定数值比int更加小,在-215~215-1里边。定义这种数据类型的时候自然要小心,要规定期存款款和储蓄的数码不会超越smallint所能存款和储蓄的数值范围。
  • tinyint
      数据类型的范围数值比smallint越来越小,存款和储蓄从 0 到 255 的整型数据。
  • decimal/numeric
      decimal[(p,s)]和numeric[(p,s)]那二种数据类型用于存款和储蓄相近精度和范围的多少(小数点的左、右两侧存款和储蓄的数值位数相符卡塔尔国,所能存款和储蓄的数值范围为-1038+1~1038-1。
      p代表钦定小数点侧面和左侧能够积累的十进制数字的最大个数,s钦命小数位数。[(p,s)]的界定为1≤p≤38,0≤s≤p。若省略s,则默以为0;若未附带p及s,则numeric表示numeric(18卡塔尔(قطر‎,只好表示整数

(2State of Qatar肖似数字数据类型

  • float
      存款和储蓄小数点不定点的数值,存款和储蓄的数值范围。为-1.79E+308~1.79E+308。
  • real
      与float特别雷同,存款和储蓄数值范围为-3.40E+38~3.40E+38。

(3State of Qatar货币数据类型

  • money
  • smallmoney

(4State of Qatar字符数据类型

  • char
      长度固定,最多能够定义8000个字符。假如定义一个名列char(n卡塔尔(قطر‎,则将储存n个字符。当输入少于定义的字符数时,剩余的长短将被在左边的空格填满。
  • nchar
      与char类型相通,但最多能够定义4000个字符,使用Unicode编码。
  • varchar
      与char同样,用于存款和储蓄字母数字数据,最多可定义8000个字符。二者区别之处在于varchar的每一行能够有区别的字符数,最大字符数未定义的最大尺寸。举例列定义为varchar(50卡塔尔,则该列数据最多能够有肆拾三个字符长。可是,若是列中只存款和储蓄了3个字符长的字符串,则只会选拔3个字符的存款和储蓄空间。假如定义列时髦无点名大小,即varchar(卡塔尔,则其尺寸默感到1。
      极度,varchar(max卡塔尔能够定义抢先8000个字符的字符串数据类型,最多10737418贰10个字符。【注意不是varchar(n卡塔尔】
  • nvarchar
      定义情势与varchar雷同,除了nvarchar使用Unicode格式存储字符。

(3卡塔尔日期和时间数据类型

  • date
      仅用来积存日期,其范围从0001年十二月1日到9999年10月二二十二日。date数据类型的格式是YYYY-MM-DD。
  • time
      只存款和储蓄基于24小时制的时间,其格式为hh:mm:ss[.nnnnnnn]。与date数据类型相仿,为了给要存款和储蓄在列中的数据提供精确的数据类型,能储存准确度达100微秒的多寡。
  • datetime
      用于存款和储蓄从1753年八月1日到9999年九月一日里边的其余日期和时间。datetime不仅仅存款和储蓄日期,何况会在日期的旁边存储时间。如若只像定义为datetime的列存入日期,则会在积存的日期中参加暗许的光阴12:00:00。
  • datetime2
      与datetime形似,datetime2用于存款和储蓄日期和岁月。分歧之处是,datatime2的数据类型秒的小数部分的精度更加高。别的,该数据类型能储存从0001年七月1日到9999年四月12日的日期。其格式为YYYY-MM-DD
    hh:mm:ss[.nnnnnnn]。
  • smalldatetime
      与datetime十三分相同,除了smalldatetime可存款和储蓄的数值范围是从一九〇五年7月1日到2079年11月6日。该数值范围的终止日期不是月末。

(4卡塔尔国二进制数据类型

  • binary
      存款和储蓄固定大小的二进制个十数额,最多可存款和储蓄8000字节。
      这种数据类型首要用以存款和储蓄作为标识或标识组合的数额。比如存款和储蓄关于客商的符号。供给明白顾客是否处在活动状态(值为1卡塔尔、前段时间一个月有无花费记录(值为2卡塔尔国、最终三个月的花费额是或不是当先1000元(值为4State of Qatar只怕是还是不是准期销账(值为8卡塔尔。那将向数据库中参预4个数据列。可是,若使用binary值,借使客商有一个值为1101的二进制值,那么该顾客具备的值为1+4+8,那标记客商是活动的。末了叁个月的费用额当先1000元并限制期限销账。
  • varbinary
      与binary十一分相近,不过varbinary每一行的物理列大小随存储的值而分歧。varbinary(max卡塔尔(قطر‎能积攒长度超越8000个字符的数量,最多可存款和储蓄2GB,可用于存款和储蓄形似图像那样的数目。

(5卡塔尔国专项使用数据类型

  • bit
      该数据类型存款和储蓄的值为0或1.平时用于剖断真假值。
  • uniqueidentifier
      用于存款和储蓄拾七人全局唯一标志符(UUID卡塔尔(قطر‎。
  • XML

②程序中的数据类型
(1)cursor
  数据可见以驻留内部存储器的景况举办仓库储存。游标,与表形似,有数据行和列,但它们的雷同之处只限于此。不一样之处如:游标未有索引。通过应用游标来树立数据集,以便叁回拍卖一行数据。

(2)table
  table数据类型与游标和表有几分相近之处。该数据类型用于存款和储蓄行和列的多寡,但无法在数码上建索引。这个时候,系统能够“三遍拍卖三个数据集”的数量,就想管理二个正式的表这样。

(3)sql_varint
  能够依据存款和储蓄的多寡变动数据类型,即用来囤积一些例外档次的数据类型。可是确定不引入应用这种数据类型。

如下表所示,将 datetime 值舍入到 .000、.003、或 .007 秒的增量 。

3、表达式

发表式常指由常量、变量、函数等经过运算符按一定的规规矩矩连接起来的有意义的架势。

1.变量
  T-SQL的变量分为局地变量和全局变量。
(1卡塔尔国局地变量
  局部变量由顾客定义,日常出以往批管理、存款和储蓄进度和触发器中,其功用范围仅在程序内部。
  局地变量必须先阐明,后使用。T-SQL还为局地变量提供了赋值语句。
  ①declare变量声称语句,其语法格式为:

declare @变量1 [as] datatype,@变量2 [as] datatype...
  • 有个别变量名称必需以@起头上马
  • as能够省略
  • 赋初值NULL

一些变量的赋值有三种方法:
  ①在变量定义的时候对其赋值:

declare @变量1 [as] datatype = value,@变量2 [as] datatype = value...

②select赋值语句,其语法格式为:

select @变量1 = 表达式1,@变量2 = 表达式2...
  • 用select命令能够一回给几个变量赋值
  • 表明式可以为平日的value,也可以为查询结果
  • 当表达式为表的列名时,情势与日常查询中央银行使列小名的用法肖似。能够使用子查询从表中贰回回到多少个值。纵然查询的结果为多行,则只会把最后一行的呼应列值赋给变量,这与PL/SQL的管理格局不相同,在PL/SQL中,不容许把多行查询结果赋值给变量

③set赋值语句,其语法格式为:

set @变量 = 表达式
  • 主导用法和select相似,分化在于一条set赋值语句只可以给叁个变量赋值,而一条select语句能够给八个变量赋值

【示例】

declare @sumsal as numeric(10,2),@dno as tinyint
select @dno = deptno,@sumsal = sum(sal) 
from emp 
where deptno = 10
group by deptno
print cast(@dno as varchar)+':'+cast(@sumsal as varchar)

(2卡塔尔国全局变量
  全局变量由SQL
Server系统定义,平时用来追踪服务器范围和特定会话时期的新闻,不能够被客户显式地定义和赋值。能够因此寻访全局变量来打听系统当下的片段景色新闻。
  全局变量名以@@伊始。下边给出一些常用的全局变量。

全局变量 说明
@@error 上一条SQL语句报告的错误号
@@nestlevel 当前存储过程或触发器的嵌套级别
@@rowcount 上一条SQL语句处理的行数
@@servername 本地服务器名称
@@identity 最后插入的标识值
@@spid 当前用户进程的会话id
@@fetch_status 上一条游标fetch语句的状态
@@cpu_busy SQL Server自上次启动后的时间状态

2.函数
  函数是用来成功某种特定功用,并回随管理结果的一组T-SQL语句,管理结果成为“再次来到值”,管理进度成为“函数体”。
  函数又分为系统内置函数和客商自行以函数。SQL
Server提供了多量系统内置函数,主要能够分为以下几类:数学函数、字符串函数、日期函数、convert函数、聚合函数。
  (1卡塔尔数学函数
  T-SQL中提供的常用的数学函数如下:

  • abs(State of Qatar:返拒却对值
  • round(数值表明式,长度,[,类型]卡塔尔国:舍入到钦定长度或精度。类型为0,表示舍入,类型为非0,表示截断
  • power(m,n):返回m的n次幂
  • trunc(卡塔尔(قطر‎:将数字截断到钦赐的位数
  • %:求余数,SQL Server没有mod(m,n),而用m%n代替

(2卡塔尔字符串函数

  • ltrim(str,substr卡塔尔国/rtrim(str,substrState of Qatar:str表示要操作的字符串,substr代表要裁剪的子串,若裁剪空格,则能够省略
  • substring(str,position,length卡塔尔:求子字符串
  • replace(str,search_str,rep_strState of Qatar:替换三个字符串中的子串。search_str表示要探索的子字符串,rep_str表示要替换的对象字符串
  • left(str,nState of Qatar:重回字符串从左侧开端的钦定个数的字符
  • len(卡塔尔(قطر‎:求字符串长度

(3卡塔尔日期和岁月函数
  首先列出日期时间函数中的首要参数。

日期时间元素 缩写 含义
year yy,yyyy
month m,mm
day d,dd
dayofyear dy 年的天数
week wk 星期数
weekday dw 星期几
hour hh
minute mi
quarter qq
second ss
millisecond ms 毫秒

T-SQL中提供下路易斯维尔期函数:

  • getdate(卡塔尔(قطر‎:再次来到当前的日子和岁月
  • year(日期卡塔尔:重返钦点日期的“年”部分的整数
  • month(日期卡塔尔(قطر‎:重回钦赐日期的“月”部分的整数
  • day(日期卡塔尔(قطر‎:再次回到钦赐日期的“日”部分的大背头
  • datepart(日期成分,日期卡塔尔国:重临日期成分钦赐的日子部分的板寸
  • datename(日期成分,日期卡塔尔国:以字符串的格局再次回到日期成分指依时期的日子名称
  • datediff(日期成分,日期1,日期2卡塔尔国:重回八个日时期的差值并将其改变为钦点日期成分的花样
  • dateadd(日期成分,数值,日期卡塔尔(قطر‎:依据“日期成分”给定的日期单位,重回“日期”加上“数值”的新日期

关系日期时间常量时,SQL
Server建议选择与dateformat及言语境遇设置毫不相关的字符串格式,日常那样的字符串常量符合上面三种格局:

  • 日期之间不利用分隔符,格式为yyyymmdd[
    hh:mi:[:ss][,mmm]],如’20070703’,’20070703 17:53:00.997’。
  • ISO
    8601标准方式,格式为yyyy-mm-ddThh:mi:ss[.mmm],日期各种部分之间利用“-”分隔符,日期和时间部分用T分隔,何况时间有个别不能够大约,如’二零零五-07-03T17:53:10’。

(4State of Qatar数据类型转变函数
  转变的方法有隐式转变和显式转变二种。
  隐式调换是SQL
Server自动地将数据从一种数据类型调换为另一种数据类型,顾客不可以看到。
  显式转换使用convert函数,该函数能够将一种数据类型的表明式强逼调换为另一种数据类型的表明式。三种数据类型必需能够实行转移,举例,char值能够转移为binary,但不能退换为image。该函数的入眼功效是把数值型或日期型数据调换为字符串,而只含有数字的字符串转变为数值型数据貌似隐式转变。
  格式:convert(数据类型(长度卡塔尔,表达式[,n])
  函数的第3个参数n是可选的,用于日期时间型数据类型和字符数据类型调换。参数取值如下表所示。

不带世纪数位 带世纪数位 格式
1 101 mm/dd/yyyy
2 102 yy.mm.dd
3 103 dd/mm/yyyy
4 104 dd.mm.yy
5 105 dd-mm-yy
8 108 hh:mi:ss
20或120 yyyy-mm-dd hh:mi::ss(24h)

【示例】

select ename+''''+'s sal is'+convert(char(7),sal) as 'EMPLOYEE'S SAL' from emp;

select cid as '客户ID',cname as '客户名称'
   convert(char(10),cRegisterationDate,102) as '注册日期'
from customer;

最终显示的日期格式就会如2006.12.02

3.运算符
算术运算符:+、-、*、/、%(求余)
字符串运算符:+(连接State of Qatar
比较运算符:=、>、>=、<、<=、<>(不对等卡塔尔(قطر‎、!>(不大于)、!<(不小于)
逻辑运算符:NOT、AND、OOdyssey、ALL(全部卡塔尔、ANY(或SOME,放肆一个卡塔尔国、BETWEEN…AND、EXISTS(存在State of Qatar、IN(在界定内)、LIKE(相称卡塔尔国
按位运算符:&(位与卡塔尔国、|(位或卡塔尔(قطر‎、^(按位异或卡塔尔(قطر‎
一元运算符:+(正State of Qatar、-(负卡塔尔、~(按位取反卡塔尔(قطر‎
赋值运算符:=(等于State of Qatar

顾客钦点的值

系统存款和储蓄的值

01/01/98 23:59:59.999

1998-01-02 00:00:00.000

01/01/98 23:59:59.995

01/01/98 23:59:59.996

01/01/98 23:59:59.997

01/01/98 23:59:59.998

1998-01-01 23:59:59.997

01/01/98 23:59:59.992

01/01/98 23:59:59.993

01/01/98 23:59:59.994

1998-01-01 23:59:59.993

01/01/98 23:59:59.990

01/01/98 23:59:59.991

1998-01-01 23:59:59.990

实验测验注脚,998会转变为997,而’二零一零-11-26
23:59:59.999’的话,就能够转移为’二〇一〇-11-27
00:00:00.000’,如下截图所示,所以进一层对数据正确性有供给之处,要专一那一个地点,否则SQL语句得出的结果在逻辑上就有误。

官方文档 中也会有描述不规范的地点,如下截图所示:

实际那些是精度难题,假若选用datetime2数据类型,它暗中认可的小数精度越来越高,不会碰着这些主题材料,越多细节提议参照他事他说加以调查官方文书档案

参考资料:

以上正是本次介绍的关于SQL
Server查询超时的知识点内容,感激大家的而读书和对剧本之家的支持。

发表评论

电子邮件地址不会被公开。 必填项已用*标注