2016-10-05 15 views
0

チャーで一日を抽出するために、どのように私は次のコードに文字で一日を抽出したいと思います:オラクル

SELECT DN_DETAILS.DN,DN_WORKING_HOURS.DAY, 
     DN_WORKING_HOURS.BEGIN_HOUR, 
     DN_WORKING_HOURS.END_HOUR 
FROM DN_DETAILS 
    JOIN DN_WORKING_HOURS ON DN_DETAILS.DN=DN_WORKING_HOURS.DN 
WHERE DN_WORKING_HOURS.DAY = (SELECT TO_CHAR(TO_DATE('03/10/2016','DD/MM/YYYY'), 'Day') FROM DUAL); 

コルDN_WORKING_HOURS.DAYはフォーム「日曜日」、「月曜日」などに日を持っています...

いただきました!これで間違っ:

(SELECT TO_CHAR(TO_DATE('03/10/2016','DD/MM/YYYY'), 'Day') FROM DUAL) 

は、私はデフォルトでは間違った

+1

あなたは同じ言語で作業しています? SELECT TO_CHAR(TO_DATE('03/10/2016 '、' DD/MM/YYYY ')、' Day ')FROM DUALは実際にクエリ全体を実行しているセッションであなたを表示しますか? 'DAY'列はどのデータ型ですか? –

+1

DN_WORKING_HOURS.DAYはvarchar2ですか? –

+0

day colはCHARにあり、 – MoshMosh

答えて

3

をやっているかわかりませんDay書式要素には、日付言語で最も長い曜日の長さが埋め込まれます。英語では9文字の水曜日です。あなたはそのパディングを抑制するためにFM format model modifierを追加することができます

select '<'|| to_char(sysdate + level, 'Day') ||'>' from dual connect by level <= 7; 

'<'||TO_CHAR(SYSDATE+LEVEL,'DAY')||'>' 
-------------------------------------- 
<Thursday > 
<Friday > 
<Saturday > 
<Sunday > 
<Monday > 
<Tuesday > 
<Wednesday> 

:あなたはとパディングを見ることができます

ので
select '<'|| to_char(sysdate + level, 'FMDay') ||'>' from dual connect by level <= 7; 

'<'||TO_CHAR(SYSDATE+LEVEL,'FMDAY')||' 
-------------------------------------- 
<Thursday> 
<Friday> 
<Saturday> 
<Sunday> 
<Monday> 
<Tuesday> 
<Wednesday> 

、あなたのテーブルのDay列がvarchar2ではなく、あまりにも埋められていると仮定すると、あなたのサブクエリをする必要があります:

(SELECT TO_CHAR(TO_DATE('03/10/2016','DD/MM/YYYY'), 'FMDay') FROM DUAL) 

...または@a_horse_with_no_nameがサブクエリなしで同じことを行うに述べたように:

... 
WHERE DN_WORKING_HOURS.DAY = TO_CHAR(TO_DATE('03/10/2016','DD/MM/YYYY'), 'FMDay'); 

が、これは今までに英語以外の環境で実行される可能性がありますので、もし、その日の名はNLSに依存しているクマの心にあなたがそれをより安全にすることができます:

... 
WHERE DN_WORKING_HOURS.DAY = TO_CHAR(TO_DATE('03/10/2016','DD/MM/YYYY'), 'FMDay', 
    'NLS_DATE_LANGUAGE=ENGLISH'); 
+0

助けてくれてありがとう! – MoshMosh