SQL查询在6:00 am到次日6:00 AM之间对数据进行计数

时间:2016-10-08 06:42:38

标签: sql oracle delphi-7

我是编程新手。

我想计算从早上6点到第二天早上6点的列值。我尝试使用以下查询,但它给出了上午12点到凌晨12点的值。查询是

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

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

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

i

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; 将日期的时间部分设置为00:00:00,然后再将6小时添加到06:00(早上6点)

trunc(sysdate)会在午夜返回一个日期,如果它当前为trunc(sysdate + 1),则会返回2016-10-08 17:00:00。如果你加6小时,那就是第二天的06:00。

不确定你的意思是“我不能使用DATE”。如果将日期存储为2016-10-09是一个很大的错误,您应该更改它并将其正确存储在VARCHAR列中。如果由于某种原因你不能这样做,你应该将该列转换为日期并比较日期,而不是字符串:

DATE

确保指定正确的格式掩码,以将and to_date(the_date_column, 'yyyy-mm-dd hh24:mi:ss') between ... 转换为varchar