2016-10-08 88 views
0

我是编程新手。SQL查询来计算数据之间的上午6:00至第二天上午6:00

我想从上午6点到下午6点计算列值。我试着使用下面的查询,但它给出了12 AM到12 AM的值。查询是

SELECT  (COUNT (COLUMN_NAME)) AS TOTAL 
FROM  TABLE_NAME 
WHERE  AREA = 1 
AND   TRIM(DATE_COLUMN) = TRIM ((SYSDATE)+6/24) 

这里我不能使用日期,这将更新在delphi2007开发的Windowsforms应用程序中的值。

+1

'trim()'用于字符串/字符值,** not **用于'DATE'列。你可能打算使用'trunc()' –

回答

0
DECLARE @StartDate datetime = '2014-01-01';  
DECLARE @EndDate datetime = '2014-01-02';  

SET @BeginDate = DATEADD(HOUR, 9, @StartDate); 
SET @EndDate = DATEADD(HOUR, 8, @EndDate);  

SELECT 
YourTable.ReadingDate, 
YourTable.Hours, 
YourTable.Data1, 
YourTable.Data2, 
YourTable.Data3 
FROM 
YourTable 
WHERE 
DATEADD(HOUR, YourTable.Hours, YourTable.ReadingDate) BETWEEN @StartDate AND @EndDate; 
+0

虽然这段代码可以解决这个问题,[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)真的有助于提高你的文章的质量。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 –

+0

这对于oracle无效 –

0

为什么你不能使用日期? 您可能会使用charcter字符串并将格式更改为正确的一个。

variable = '2016-10-08' 
to_Date(varable||' 06:00:00','yyyy-mm-dd HH24:MI:SS') 

如果你想只得到今天6点钟和随之而来的6天点钟 之间的值。例如

SELECT (COUNT (COLUMN_NAME)) AS TOTAL 
FROM TABLE_NAME 
WHERE AREA = 1 
AND DATE_COLUMN between trunc(sysdate,'DD') + 6/24 and trunc(sysdate+1,'DD') + 6/24 
0
select count(column_name) as total 
from the_table 
where area = 1 
    and the_date_column 
      between trunc(sysdate) + interval '6' hour 
       and trunc(sysdate + 1) + interval '6' hour; 

trunc(sysdate)设置日期时间部分为00:00: 00当你再添加6小时到你得到06:00(上午6点)

trunc(sysdate + 1)返回一个日期午夜,所以如果它目前2016-10-08 17:00:00 th将返回2016-10-09。如果你增加6小时,第二天就是06:00。


不确定您的意思是“我无法使用日期”。如果将错误的日期存储为VARCHAR,那么您应该更改并将其正确存储在DATE列中。如果由于某种原因,你不能做到这一点,就应该该列转换为日期和比较日期,而不是字符串:

and to_date(the_date_column, 'yyyy-mm-dd hh24:mi:ss') between ... 

确保您指定正确的格式掩码的varchar转换为DATE

相关问题