我是编程新手。
我想计算从早上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应用程序中的值。
答案 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
。