【转】一道SQL SERVER DateTime的试题

学习过上一篇SQL SERVER DateTime精度的文章后。再来做一道题。

IF (‘2011-07-31 00:00:00.000‘ BETWEEN ‘2011-07-01‘ and ‘2011-07-31 ‘)
PRINT ‘Yes‘
ELSE
PRINT ‘No‘

结果是什么,如果你认为是Yes,那么你就上当了,哈哈。因为这不是两个日期类型在比较,这就是两个字符串在比较。

所以结果当然是NO。

如果要进行比日期比较,应该进行类型转换,如下比较:

IF (CAST(‘2011-07-31 00:00:00.000‘ AS DATETIME) 
BETWEEN CAST(‘2011-07-01‘ AS DATETIME) 
  AND CAST(‘2011-07-31‘ AS DATETIME))
PRINT ‘Yes‘
ELSE
PRINT ‘No‘

这一结果就是Yes了。

这也是在网上看到的,觉得有趣,就贴过来了。仅供大家学习。呵呵。

时间: 2024-08-09 14:40:43

【转】一道SQL SERVER DateTime的试题的相关文章

sql server DateTime 取时间间隔不是1毫秒,时间间隔是3.33毫秒,3.33ms C#开发

sql server  DateTime 取时间的间隔是3.33毫秒(3.33ms),所以如果增加1毫秒,数据库默认时间没有增加 C#开发时 DateTime dt=new DateTime(); dt=DateTime.Now; dt=dt.AddMilliseconds(1) ; // dt 的值在数据库没有变化,时间差是1毫秒,sqlserver 默认时间没有增加 dt=dt.AddMilliseconds(3) ;//dt的值在数据库增加3毫秒  获取到的时间差是3毫秒

SQL Server Datetime类型为NULL不能用ISNULL(datetime,' ')来判断,会导致1900-01-01

select top 10 --(case when zb.Order_CreatedOn is null then '' when zb.Order_CreatedOn<>'1900-01-01' then zb.Order_CreatedOn end) as Order_CreatedOn,*--datetime类型不能转成'',如果转成'',返回给程序就是1900-01-01,''这种空字符串默认就会返回1900-01-01,所以不用在SQL里面转换,在程序里面用DBNUll.value

SQL Server datetime数据类型设计、优化误区

一.场景 在SQL Server 2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你看到表的记录如下图所示,你最先想到的是什么呢? (图1:数据列表) 你看到这些数据,是不是觉得这样的设计既浪费了存储空间,又使得这个列的索引增大,查询起来更慢,你也想使用一些其它的数据类型来代替这个datetime吧? 其实大家都是这么想的,这个方向是100%正确的,但是在写这篇文章以前,我进入了两个误区:(如果你中了下面的两个误区,那么请你看看这篇文章吧.)

【转】SQL SERVER DateTime类型的精度

先看下边的SQL 语句 CREATE TABLE #DateTest( Id INT, SampleDate DATETIME ) INSERT INTO #DateTest VALUES(1,'1 jan 2010 10:30') INSERT INTO #DateTest VALUES(2,'2 jan 2010 23:59') INSERT INTO #DateTest VALUES(3,'3 jan 2010 12:34') INSERT INTO #DateTest VALUES(4,

SQL Server datetime 数据类型的问题

近日,在查一个收银报表时,发现一个问题,就是SQL Server中时间日期的字符串值转datetime 类型时,出现了奇怪的事情. 查询如下: 需查询2015-07-01这天的收银数据.传入的日期为:开始日期 '2015-07-01 00:00:00.000' , 结束日期 '2015-07-01 23:59:59.999' . 查询后,发现此收银报表的赠送金额和其它报表的赠送金额对不上.经跟踪发现,赠送金额是有一个表A存储的,A表的日期字段为char类型,仅保存了日期部分的值. 当我们传人的结

SQL SERVER DATETIME应用

PRINT '上周的第一天:'+CONVERT(NVARCHAR(20),DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE())-1, 0),120); PRINT '本周的第一天:'+CONVERT(NVARCHAR(20),DATEADD(WEEK, DATEDIFF(WEEK, 0, GETDATE()), 0),120); PRINT '上月的第一天:'+CONVERT(NVARCHAR(20),DATEADD(MONTH, DATEDIFF(MONTH,

SQL Server datetime类型转换超出范围的报错

一个很基础的插入语句: insert into table1 select col1,convert(datetime,col2),convert(datetime,col3),col4,col5 from table2 其中table1表中col2,col3是datetime类型,其他都是varchar类型,table2全部是varchar类型. table2表中全部是varchar类型,col 1 4 5都有可能是空值. 在执行时报出如下错误: 消息 242,级别 16,状态 3,第 1 行

sql server datetime类型字段使用isnull返回1900-01-01 00:00:00.000的问题

若字段定义的类型为datetime,插入为''(空),那么会默认值为1900-01-01 00:00:00.000 解决方法查询的时候过滤下cast(nullif('','') as datetime) select cast('' as datetime) , cast(nullif('','') as datetime) , isnull(cast(nullif('','') as datetime),getdate()) 原文地址:https://www.cnblogs.com/hofma

sql server Datetime格式转换

select CONVERT(varchar, getdate(), 120 ) 2004-09-12 11:06:08 select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','') 20040912110608 select CONVERT(varchar(12) , getdate(), 111 ) 2004/09/12 select CONVERT(varchar(12) ,