2016-10-08 36 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

相關問題