-1

以下の表に情報があり、2 つの日付の差が >= 1 の場合にカウントを取得したいと考えています。

Id  testdate  exdate    
1   20120502  20120501  --> This should included, because diff is 1    
2   20120601  20120601  --> This should not included, because diff is 0    
3   20120704  20120703  --> This should included, because diff is 1    
4   20120803  20120802  --> This should included, because diff is 1

上記のデータに基づいて、選択カウントは 3 を返すはずです。

次のことを試していますが、結果が得られません。

select count(to_char(testdate,'YYYYMMDD')-to_char(exdate,'YYYYMMDD')) from test ;
4

3 に答える 3

0
select count(*)
  from my_table
 where testdate <> exdate 

ただし、実際にはそれらをdateデータ型に変換する必要があります...長期的には多くの問題を回避できます。

クエリによって結果が得られます。testdate - exdate4 が返されます。結果が null でない限り、その行の値が返されるため、結果が得られます。

ただし、日付を使用していないため、Oracleはおそらくそれらを数値に変換します。これは、将来それを行う場合、日付の比較には役立ちません。

20120901 - 20120831 = 70 -- not 1

さて、あなたのコメントから:

で作業して、私が下票を使用する場合accept select count(*) from test where to_char((testdate,'YYYYMMDD') - to_char(exdate,'YYYYMMDD')) >= 1; .ただし、カウントは列の 1 つです。上記の select ステートメントを列の 1 つとして取得する方法

あなたはまったく違うことを試みています。

あなたの日付は実際には日付です。これを投稿すると便利です。具体的には、分析関数を探していますcount()

select a.*, count(*) over ( partition by 1 ) as ct
  from my_table a
 where trunc(exdate) <> trunc(testdate)

関数に注意してください。trunc追加のパラメーターを使用しないと、日付の時刻部分が削除され、日付を文字に変換することなく直接比較できます。

于 2012-09-03T18:07:45.927 に答える
0
select count(*)
   from test
  where to_date(testdate,'YYYYMMDD') - to_date(exdate,'YYYYMMDD') >= 1;

また

select count(*)
   from test
  where to_date(testdate,'YYYYMMDD') <> to_date(exdate,'YYYYMMDD');

見るtestdateexdate、列がVARCHAR型のように見えるため、適切な日付変換が必要になります。

于 2012-09-03T18:09:50.963 に答える
0

Oracleでは、タイプが日付の場合、それらで計算できます。1日は1日。1/24 は 1 時間に相当します。

文字列を比較することさえできるので、あなたのケースはかなり簡単です。

SELECT count(*)
  FROM test
 WHERE testdate <> exdate  

しかし、変数になりたいように聞こえるので、それらを日付に変換してから行うことができます

SELECT count(*)
  FROM test
 WHERE to_date(testdate,'YYYYMMDD')-to_date(exdate,'YYYYMMDD') >= 1

exdate が testdate より後であるため、testdate から exdate を引いた値が -1 以上の場合、何が必要かわかりません。その後、あなたは一緒に働くことができますABS

SELECT count(*)
  FROM test
 WHERE ABS(to_date(testdate,'YYYYMMDD')-to_date(exdate,'YYYYMMDD')) >= 1
于 2012-09-03T19:06:29.180 に答える