2016-10-08 5 views
0

Я новичок в программировании.SQL-запрос для подсчета данных с 6:00 до следующего дня 6:00 AM

Я хочу посчитать значение столбца от 6 утра до следующего дня 6 утра. Я попытался использовать следующий запрос, но он дает значение от 12 AM до 12 AM. Query является

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

Здесь я не могу использовать дату, это будет обновлять значение в WindowsForms приложение разработано в delphi2007.

+1

'trim()' для значений строк/символов, ** не ** для столбцов '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

Это не относится к оракулу –

0

Почему вы не можете использовать дату? вы можете использовать строку charcter и изменить формат для правильного.

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

Если вы хотите просто получить значения между сегодня 6 часов и последующий день 6 OClock Например

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, который вернет 2016-10-09. Если вы добавите к нему 6 часов, на следующий день будет 06:00.


Не уверен, что вы имеете в виду под «Я не могу использовать DATE». Если вы сделали большую ошибку, чтобы сохранить свои даты как VARCHAR, вы должны изменить это и сохранить их правильно в столбце DATE. Если по одной причине вы не можете сделать это, вы должны преобразовать этот столбец в дату и сравнивать даты, а не строки:

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

Убедитесь, что вы указали правильную маску формата для преобразования varchar в DATE.