2016-10-08 4 views
0

プログラミングに慣れていません。SQLクエリのデータ数を午前6時から翌日6時まで

私は午前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アプリで値を更新し、日付を使用することはできません。

+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

これはOracleでは無効です –

0

なぜあなたは日付を使用できませんか? charcter文字列を使用し、フォーマットを適切に変更することができます。あなただけの例えば今日6時とその後の日の6 oclock 間の値を取得したい場合

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

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になります。


"私は日付を使用できません"とはどういう意味なのでしょうか。あなたの日付をVARCHARとして保存するのが間違っている場合は、それを変更してDATE列に正しく保存する必要があります。一つの理由のためにあなたがそれを行うことができない場合は、現在までにその列を変換し、日付を比較ではなく、文字列する必要があります

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

あなたはDATEvarcharを変換するための正しい書式マスクを指定していることを確認してください。

関連する問題