-1

デュアルの時間と分をテーブルに保存されている実際のデータと比較しようとしています。

TO_CHAR(sysdate,'HH.MI') は char を返しますが、私のデータには浮動小数点数が含まれています

しかし、 no data found と表示されます。

私はこれをやろうとしています:

 create or replace function getSysTime

   return char

  is
      hhhh             intervals.interval_end%type;
   v_interval_start    intervals.interval_start%type;
   v_interval_end     intervals.interval_end%type;
   v_interval_id    intervals.interval_id%type;

  begin

     select  INTERVAL_START ,INTERVAL_END , INTERVAL_ID , TO_CHAR(sysdate,'HH.MI')
     into  v_interval_start , v_interval_end , v_interval_id , hhhh
    from INTERVALS

    where hhhh  =  INTERVAL_START ;

    return v_interval_id;    

   end;

で解決:

 sloved by using cast char to float . 

  where cast (TO_CHAR(sysdate,'HH.MI') as float)  between  INTERVAL_START and INTERVAL_END ;
4

2 に答える 2

2

スタック オーバーフローへようこそ!

WHEREは通常、SELECTステートメントを WHERE 条件を満たす行 (つまりWHERE myTable.favoriteNumber = 5) に制限するために使用されます。または、そこにブール式を含めることもできます。 WHERE 1=1に評価されWHERE TRUEます。であるためTRUE、すべての行が返されます。 WHERE 0=2どのWHERE FALSE行でも 0 は 2 と等しくないため、行は返されません。

とにかく論理的に考えてください。行のセットを取得するには、パラメーターを指定する必要があります。データベースはどの行が必要かをどのように認識しますか? まず、 を使用してフィールドを選択する必要がありますSELECT。どのテーブル?を定義しFROMます。特定の条件を満たす行のサブセットが必要ですか? を追加しWHEREます。行の値はどこに保存できますか? を追加しINTOます。PL/SQL が手続き型だからといって、常に上から下、左から右に読むとは限りません。

hhhhどの行が条件に一致するかを知る前に、コードが値を挿入できなかった可能性がありますWHERE。したがって、 がありますWHERE null = INTERVAL_START

この回答が質問への回答に役立った場合は、左側にある承認済みの回答のチェックマークを選択してください。

于 2013-08-29T03:19:44.337 に答える