sqlserver2008时间转换问题,(拿上一个小时的数据)求解。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver2008时间转换问题,(拿上一个小时的数据)求解。相关的知识,希望对你有一定的参考价值。

select * from table
WHERE 采集时间点 between CONVERT(varchar, GETDATE(), 23) + ' ' + convert(varchar, DATENAME(hour,getdate())-1) +':00:00'
and CONVERT(varchar(100), GETDATE(), 23) + ' ' + CONVERT(VARCHAR,DATENAME(hour,getdate()) -1) +':59:59' 查不到数据(实际中是有数据)

select * from table
WHERE 采集时间点 between CONVERT(varchar, GETDATE(), 23) + ' ' + convert(varchar, DATENAME(hour,getdate())) +':00:00'
and CONVERT(varchar(100), GETDATE(), 23) + ' ' + CONVERT(VARCHAR,DATENAME(hour,getdate()) ) +':59:59' 不写减一就对了,实现的是取上一个小时的数据。 懂行的帮忙看看。

下面那个写的意思取得是当前小时内的数据,上面减一的取得是上个小时的数据,首先你要确定表里有没有满足减一时间条件的数据

追问

我昨天还是可以的,今天就不行了,什么都没动。 我这边也能像你那样找出来范围的,但是在证据运行中实现 “减1”时就查不出数据,数据是有的。 但是不减一能查出来数据。 很奇怪的。 昨天是好的,我很确定,是不是数据库有问题?

追答

昨天日期跟今天不一样啊 昨天是8号 今天是9号啊 你的getdate()取得不是昨天的啊,你先可以把日期写死(写成昨天的)测下

参考技术A

日期的增减别用-1,要用日期函数

DATEADD(hh, -1, 日期)    --将当前日期小时-1

sqlserver date与datetime区别及sqlserver日期格式转换

date是SQL Server 2008新引进的数据类型。它表示一个日子,不包含时间部分,可以表示的日期范围从公元元年1月1日到9999年12月31日。只需要3个字节的存储空间。
DateTime 日期和时间部分,可以表示的日期范围从公元1753年1月1日00:00:00.000 到9999年12月31日23:59:59.997 ,精确到3.33毫秒,它需要8个字节的存储空间。

Sqlserver日期转换

Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006  10:57AM

Select CONVERT(varchar(100), GETDATE(), 1): 05/16/06

Select  CONVERT(varchar(100), GETDATE(), 2): 06.05.16

Select CONVERT(varchar(100),  GETDATE(), 3): 16/05/06

Select CONVERT(varchar(100), GETDATE(), 4):  16.05.06

Select CONVERT(varchar(100), GETDATE(), 5): 16-05-06

Select  CONVERT(varchar(100), GETDATE(), 6): 16 05 06

Select CONVERT(varchar(100),  GETDATE(), 7): 05 16, 06

Select CONVERT(varchar(100), GETDATE(), 8):  10:57:46

Select CONVERT(varchar(100), GETDATE(), 9): 05 16 2006  10:57:46:827AM

Select CONVERT(varchar(100), GETDATE(), 10):  05-16-06

Select CONVERT(varchar(100), GETDATE(), 11): 06/05/16

Select  CONVERT(varchar(100), GETDATE(), 12): 060516

Select CONVERT(varchar(100),  GETDATE(), 13): 16 05 2006 10:57:46:937

Select CONVERT(varchar(100),  GETDATE(), 14): 10:57:46:967

Select CONVERT(varchar(100), GETDATE(), 20):  2006-05-16 10:57:47

Select CONVERT(varchar(100), GETDATE(), 21): 2006-05-16  10:57:47.157

Select CONVERT(varchar(100), GETDATE(), 22): 05/16/06 10:57:47  AM

Select CONVERT(varchar(100), GETDATE(), 23): 2006-05-16

Select  CONVERT(varchar(100), GETDATE(), 24): 10:57:47

Select CONVERT(varchar(100),  GETDATE(), 25): 2006-05-16 10:57:47.250

Select CONVERT(varchar(100),  GETDATE(), 100): 05 16 2006 10:57AM

Select CONVERT(varchar(100), GETDATE(),  101): 05/16/2006

Select CONVERT(varchar(100), GETDATE(), 102):  2006.05.16

Select CONVERT(varchar(100), GETDATE(), 103): 16/05/2006

Select  CONVERT(varchar(100), GETDATE(), 104): 16.05.2006

Select  CONVERT(varchar(100), GETDATE(), 105): 16-05-2006

Select  CONVERT(varchar(100), GETDATE(), 106): 16 05 2006

Select  CONVERT(varchar(100), GETDATE(), 107): 05 16, 2006

Select  CONVERT(varchar(100), GETDATE(), 108): 10:57:49

Select CONVERT(varchar(100),  GETDATE(), 109): 05 16 2006 10:57:49:437AM

Select CONVERT(varchar(100),  GETDATE(), 110): 05-16-2006

Select CONVERT(varchar(100), GETDATE(), 111):  2006/05/16

Select CONVERT(varchar(100), GETDATE(), 112): 20060516

Select  CONVERT(varchar(100), GETDATE(), 113): 16 05 2006 10:57:49:513

Select  CONVERT(varchar(100), GETDATE(), 114): 10:57:49:547

Select  CONVERT(varchar(100), GETDATE(), 120): 2006-05-16 10:57:49

Select  CONVERT(varchar(100), GETDATE(), 121): 2006-05-16 10:57:49.700

Select  CONVERT(varchar(100), GETDATE(), 126): 2006-05-16T10:57:49.827

Select  CONVERT(varchar(100), GETDATE(), 130): 18 ???? ?????? 1427  10:57:49:907AM

Select CONVERT(varchar(100), GETDATE(), 131): 18/04/1427  10:57:49:920AM

 

-- 月份加2

select DATEADD(MONTH,2,(select GETDATE()));

 

获取2013-01-01到当前时间的每一天,需要增加一张days表,字段days为1-10000

declare @begin datetime,@end datetime

set @begin=‘2013-01-01‘

set @end=CONVERT(date,GETDATE(),23)

 

declare @months int

set @months=DATEDIFF(DAY,@begin,@end)  -- 获取开始日期与结束日期的天数

select convert(varchar(10),DATEADD(DAY,days,@begin) ,112) AS 月份  -- 增加一天

from days 

where days<=@months;


以上是关于sqlserver2008时间转换问题,(拿上一个小时的数据)求解。的主要内容,如果未能解决你的问题,请参考以下文章

转换 SQL Server 2008 R2 和 2012 之间的差异

在 SQL Server 2008 中将 NVARCHAR 转换为 INT 数据类型

SQL Server 2008 函数将 GMT 时间转换为 AEST 并采用夏令时

SQL Server 2008 R2 数据类型转换错误

Sql Server 2008 R2 - SSMA 转换的扩展过程调用(IMPL 过程)影响性能

在 SQL Server 2008 R2 中将 varchar 转换为时间戳