热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQLServer惊天大BUG?[code=SQL]select*fromtable_namewherecol_date<='2010-6-28

SQLServer惊天大BUG?select*fromtable_namewherecol_date<2010-6-2823:59:59.999会输出包含20
SQLServer惊天大BUG?


select * from table_name where col_date<='2010-6-28 23:59:59.999'

会输出包含2010-6-29 00:00:00.000的记录,但这样写不会:

select * from table_name where col_date<='2010-6-28 23:59:59.998'


BUG?

SQL2005

39 个解决方案

#1


col_date是什么类型?

#2


知道了

#3


....

#4


引用 1 楼 josy 的回复:
col_date是什么类型?


datetime型

#5


declare @t table(dt datetime)
insert @t select '2010-6-29 00:00:00.000'
insert @t select '2010-6-28 23:59:59.998'
insert @t select '2010-6-28 23:59:59.999'
select * from @t
/*
dt
-----------------------
2010-06-29 00:00:00.000
2010-06-28 23:59:59.997
2010-06-29 00:00:00.000

(3 行受影响)
*/

#6


毫秒入到 .000、.003 或 .007 秒三个增量。

#7


select cast('2010-6-28 23:59:59.999' as datetime)
/*
-----------------------
2010-06-29 00:00:00.000
*/

#8


这个本来就是datetime的处理方法。

#9


引用 6 楼 ldslove 的回复:
毫秒入到 .000、.003 或 .007 秒三个增量。

...

#10


记录。

#11


引用 9 楼 wufeng4552 的回复:
引用 6 楼 ldslove 的回复:
毫秒入到 .000、.003 或 .007 秒三个增量。

...


舍入到  xx0,xx3,xx7可以了吧

#12


6楼可能有道理,但我认为微软如果允许输入好像不应该这么处理哦

我是前台传入datetime型发现错误的,字段也是datetime型,不涉及转换问题

#13


看联机丛书吧

#14


特别是涉及跨日问题,哪能这么转,可以建议微软修改一下哈

#15


datetime 和 smalldatetime

代表日期和當日時間。

資料類型  範圍  精確度  
datetime
 1753 年 1 月 1 日到 9999 年 12 月 31 日
 3.33 毫秒
 
smalldatetime
 1900 年 1 月 1 日到 2079 年 6 月 6 日
 1 分鐘
 

#16


最好把毫秒入到 .000、.003 或 .007 秒都调到.001精度

这037规则太搞了

#17


datetime只能精确到10/3毫秒。

#18


#19



--try

mssql 数据类型->datetime.....
用convert(转换一下)

#20


引用 16 楼 dev1978 的回复:
最好把毫秒入到 .000、.003 或 .007 秒都调到.001精度

这037规则太搞了

人家联机从书说了

#21


引用 20 楼 sql77 的回复:
引用 16 楼 dev1978 的回复:
最好把毫秒入到 .000、.003 或 .007 秒都调到.001精度

这037规则太搞了

人家联机从书说了

顶,就是这么回事。

#22


引用 16 楼 dev1978 的回复:
最好把毫秒入到 .000、.003 或 .007 秒都调到.001精度

这037规则太搞了


技术上完全可以使datetime类型的时间精度达到.001毫秒,而且不需要增加datetime类型的存储空间。
不清楚为什么SQLServer要这么处理,取一个10/3毫秒的精度。

#23


2008 吧 这个的有 支持100纳秒的!

#24


这是sql server毫秒的精确度问题

#25


引用 23 楼 xiaoku 的回复:
2008 吧 这个的有 支持100纳秒的!


那是datetime2类型

#26


LS已经是正解我就不重复了

#27


精度问题,别大惊小怪。。。多读下文档

#28


#29


引用 20 楼 sql77 的回复:
引用 16 楼 dev1978 的回复:
最好把毫秒入到 .000、.003 或 .007 秒都调到.001精度

这037规则太搞了

人家联机从书说了


时间被归整化了。

#30


恩,学习了

#31


恩,学习了

#32


噢耶,,学习了,,楼主哥哥,,你太油菜了。。

#33


学习一下

#34


#35


SQL的时间精度本来就只有千分三。

#36


 2.字符型和DATETIME类型转换精度问题

     

--字符串转化成datetime ,转化后的时间比字符串慢了1毫秒,这是因为自动舍入到最近的百分之三秒

declare @s varchar(100)

set @s='2005-09-23 03:23:43:001'

SELECT CAST(@s AS datetime)

/*

-----------------------

2005-09-23 03:23:43.000

*/

-------------------------

--字符串转化成smalldatetime ,转化后的时间比字符串快了大约秒,这是因为自动舍入到最近的分钟数

declare @s varchar(100)

set @s='2005-09-23 03:23:43:001'

SELECT CAST(@s AS Smalldatetime)

/*

-----------------------

2005-09-23 03:24:00

*/

 

------------------

还要注意 它们之间的转化并不是什么简单的截断数据 有精确到毫秒时候 毫秒部分匹配【0-9】【0-9】【037】

SQL SERVER 有时候无法精确表示某个时间的瞬间,比如‘20090202 23:59:59.999’,自动舍入为

‘20090203 00:00:00.000’

 

 

declare @s table (dates datetime)

insert @s

select '20090211 00:00:00.000' union all 

select '20090212 00:00:00.000'

 

select * from @s 

where dates between '20090211 00:00:00:000' and '20090211 23:59:59.999' --转化成-02-12 00:00:00.000

/*

dates

-----------------------

2009-02-11 00:00:00.000

2009-02-12 00:00:00.000

*/

 

select * from @s 

where dates >='20090211' and dates< '20090212' --SARG,优化器考虑使用Index Seek

 

 

---------------

2009-02-11 00:00:00.000

*/

 

select * from @s 

where convert(varchar(8),dates,112)='20090211' 

/*

Dates

-----------------------

2009-02-11 00:00:00.000

*/


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/feixianxxx/archive/2009/10/15/4677124.aspx

#37


343,这个阵型很经典啊

#38


引用 6 楼 ldslove 的回复:
毫秒入到 .000、.003 或 .007 秒三个增量。


东升哥说的对。 sqlserver中datetime类型只能精确到3毫秒的。

#39


你肯定不是工控应用,所以毫秒没什么意义,
时间类型不用datetime,是用varchar(19),把毫秒给掐了。

推荐阅读
author-avatar
重孙女俘虏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有