2

土曜日に採用された従業員の情報を抽出するように依頼されました。以下のコードのようにしてみました。しかし、利用可能なデータはありますが、利用可能なデータがないと表示されます

select first_name,last_name
  from employees
 where upper(to_char(hire_date,'day')) like 'SATURDAY'

しかし、次のコードを使用すると、チャンピオンのように機能します。このコードは上司から教えてもらいました。

select first_name,last_name
  from employees
 WHERE TO_CHAR(HIRE_DATE,'fmDay') = 'Saturday'

コードが機能しない理由を知りたい。説明してください。私はオラクルの初心者で、ある関数と別の関数の違いを見つけるために一生懸命働いています。

4

4 に答える 4

5

TO_CHAR(hire_date,'day')曜日名を返します。右側から最も長い曜日名の長さまで空白が埋め込まれます。たまたま、Wednesday返された曜日名が 9 文字未満の場合は、空白が埋め込まれます。

like 'SATURDAY'ワイルドカード文字のない条件は と同等= 'SATURDAY'です。

したがって、と等しくない(は余分なスペース文字) をto_char(hire_date,'day')返します。したがって、クエリは行を返しません。SATURDAY__SATURDAY

これらの余分なスペースを取り除くには、FMフォーマット モデル修飾子 ( ) を使用します。TO_CHAR(HIRE_DATE,'fmDay')

于 2013-08-21T09:27:03.850 に答える
2

day と fmday の違いは、fmday では、'fm' プレフィックスを配置することで、埋め込まれたスペースを削除できることです。

これを試して結果を取得し、

select first_name,last_name
  from employees
 where REPLACE(upper(to_char(hire_date,'day')),' ','') like 'SATURDAY'
于 2013-08-21T09:18:17.843 に答える
1
  select to_char (date '2011-07-24', 'D') d from dual;

このクエリは、日にマップされた数値を返すため、クエリを次のように書き換えることができます。

 select first_name,last_name
 from employees
 WHERE to_char (Hire_date '2011-07-24', 'D') d = 7
于 2013-08-21T09:14:44.687 に答える
0

次のステートメントを使用してクエリを実行し、最初に条件を確認してください。

select upper(to_char(hire_date,'day')) from employees
于 2013-08-21T09:12:05.850 に答える