• ベストアンサー

Oracle10gのsql分についての質問です。(WHERE句)

Oracle10gのsql分についての質問です。(WHERE句) 先ほどの続きになります。申し訳ございません。 日付型のフィールドに[2006/07/01 01:02:03]と、 日付と時刻のデータが入っています。 SELECT文で日付が[2006/07/01]のみのデータを 抽出する場合、TO_CHAR(フィールド名,'YYYY/MM/DD')と 教えていただき成功いたしました。 ところが、WHERE句にこれと同じ文を書くと、 「リテラルが書式文字列と一致しません」とエラーに なります。 どうすれば良いのでしょうか? 宜しくお願い致します。

  • Oracle
  • 回答数4
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
noname#19197
noname#19197
回答No.2

WHERE TO_CHAR(フィールド名,'YYYY/MM/DD') = '2006/07/01' ではダメですか?

m-toshi
質問者

お礼

これでOKでした。 今後とも、宜しくお願い致します。

その他の回答 (3)

  • entree
  • ベストアンサー率55% (405/735)
回答No.4

- where trunc(フィールド名,'dd')=to_date('2006/07/01','yyyy/mm/dd') - where trunc(フィールド名,'dd')=to_date('2006/07/01','yyyy/mm/dd') 上記のいずれも文法的には間違いではありませんが、性能を意識した SQL 文を書くためには、 日付フィールド名 >= TO_DATE('2006-07-01', 'YYYY-MM-DD') AND 日付フィールド名 < TO_DATE('2006-07-02', 'YYYY-MM-DD') と書くようにする (フィールド名に関数を使わない) のが良いと思います。これは Oracle に限ったことではありません。 ちなみに、「リテラルが書式文字列と一致しません」はフォーマットの書き方に誤りがあるために発生するエラーです。

m-toshi
質問者

お礼

ご回答をありがとうございます。 今後の参考にさせて頂きます。 今後とも、宜しくお願い致します。

回答No.3

where trunc(フィールド名,'dd')=to_date('2006/07/01','yyyy/mm/dd'); と書くのが、環境の左右されない正確な記述です。

m-toshi
質問者

お礼

ご回答をありがとうございます。 今後の参考にさせていただきます。 今後とも、宜しくお願い致します。

noname#19197
noname#19197
回答No.1

どういうSQLを実行されているのか分かりませんが、 「リテラルが書式文字列と一致しません」というエラーは、書式変換で型が合ってないときにでるエラーです。 推測ですが、文字列を日付型に変換しようとしてエラーになってるのではないでしょうか? もっと詳しい情報が分かれば明確な答えがでるかもしれません。

m-toshi
質問者

お礼

ご回答をありがとうございます。 今日、実行してみると不思議とエラーには なりませんでした。 お騒がせして申し訳ございません。 今後とも、宜しくお願い致します。

関連するQ&A

  • Oracle10gのsql分についての質問です。

    Oracle10gのsql分についての質問です。 日付型のフィールドに[2006/07/01 01:02:03]と、 日付と時刻のデータが入っています。 SELECT文で日付が[2006/07/01]のみのデータを 抽出したいのですが、LEFT(フィールド名,10)='2006/07/01'と するとエラーになってしまいます。 どうすれば良いのでしょうか? 宜しくお願い致します。

  • WHERE句でのデータ型について

    お願い致します。 ORACLEのWHERE句に対する疑問点ですが、 カレンダを管理するテーブル(カレンダマスタ)において、条件を指定してデータをSELECTする時にWHERE句に記入するデータ型についてご指導お願いします。 <詳細> 目的としてカレンダマスタよりSYSDATEの年月の休みの日を除く、稼動日数(COUNT)を求めるのが、目的です。 自分で作成した、SQLでは目的を果たしているのですが、WHERE句にTO_CHARを使用し、抽出項目(年月日-DATE型)を指定しているのですが、条件を指定する時は、TO_CHARで指定しても問題は無いのでしょうか? <SQL> SELECT COUNT(TO_NUMBER(休みFLG)) AS 稼動日 FROM カレンダマスタ WHERE 年月日 BETWEEN (TO_DATE(LAST_DAY(ADD_MONTHS(SYSDATE,-1))+1,'YYYY/MM/DD')) AND (TO_CHAR(LAST_DAY(SYSDATE),'YYYY/MM/DD')) AND 休みFLG='0' <補足> 休みFLG='0'は稼動日

  • SQL分のWHERE句について

    SQLのWHERE句について ================================== ABC :入力値(2又は5バイトの可変) T.テーブル.フィールド:ABCが格納されているテーブル(格納すると同時に5桁になります。) 例:01(入力値)⇒01000(格納値) ================================== 参照時のWHERE句の作成の仕方を教えてください。 ※検索値が2桁の場合は、格納値5桁の前方2桁一致でHITさせます。  また5桁の場合は、格納値5桁の全一致です。 今考えているのでは、 IF ABC <> "" THEN IF LenB(ABC) = 2 THEN SQL_WHERE = SQL_WHERE & "AND (LEFT(T.テーブル.フィールド,2) = '" & ABC & "' )" ELSEIF SQL_WHERE = SQL_WHERE & "AND (T.テーブル.フィールド = '" & ABC & "')" END IF END IF です。 宜しくお願いします

  • SQL2000のWHERE句について・・・

    VARCHAR(7)のフィールドがあります。 最初の二桁を地区、次の二桁を五十音、最後の三桁を商品コードと仮定します。 そこで問題なんですが、五十音の'01'から'20'を抽出したい場合にはどのようなWHERE句を書いたらよろしいのでしょうか? ご解答宜しくお願いします。

  • Oracle SQLの、where句内の条件文について教えてください。

    Oracle SQLの、where句内の条件文について教えてください。 下記SQLの(1)と(2)の記述文を教えてください。 (1)例:owner = sys,admin ownerがsysまたは、adminを抽出 (2)例:column_name = '*aaa*' column_nameに「aaa」が含まれているデータ SELECT owner, table_name,column_name FROM all_tab_columns WHERE (1)(Ownerを複数指定)   and (2)(column_nameに、●●が含まれるデータ)

  • Oracle10gのSQL分について

    Oracle10gのSQL分についての質問です。 [A]テーブルがあります。 フィールドは、 [CODE](key) [DATE1] [DATE2] [DATE3] と、あります。内容は、 A 2006/07/01 2006/07/04 2006/07/07 B 2006/07/03 2006/07/08 2006/07/05 C 2006/07/02 2006/07/06 2006/07/09 と、あります。 結果を A 2006/07/01 C 2006/07/02 B 2006/07/03 A 2006/07/04 B 2006/07/05 C 2006/07/06 A 2006/07/07 B 2006/07/08 C 2006/07/09 と、したいのです。つまり、3つのフィールドの日付順にしたいのです。 出来るのでしょうか? 宜しくお願い致します。

  • GROUP BY使用時のソートについて

    OracleSqlにて「GROUP BY」使用した日付のデータを取得するSql文を作成したのですが、 「ORDER by」句に「DESC」を付けても降順ソートが行えません。 作成したSql文は以下の通りなのですがなぜ降順ソートが行えないのでしょうか? 「GROUP BY」を使用するとソート出来ないと言うことなのでしょうか? それとも日付型なのでソートが出来ないと言うことなのでしょうか? どなたかご存知の方おりましたらご教授下さい。 ------------------------------------------------- SELECT TO_CHAR(RECORDDATE,'YYYY/MM/DD') ,RECORDYEAR ,RECORDMONTH ,RECORDDAY FROM STOCKTBL WHERE TO_CHAR(RECORDDATE,'YYYY/MM/DD')<='2002/03/07' AND TO_CHAR(RECORDDATE,'YYYY/MM/DD')>='2002/02/22' GROUP BY TO_CHAR(RECORDDATE,'YYYY/MM/DD') ,RECORDYEAR ,RECORDMONTH ,RECORDDAY ORDER by TO_CHAR(RECORDDATE,'YYYY/MM/DD') ,RECORDYEAR ,RECORDMONTH ,RECORDDAY DESC -------------------------------------------------

  • DELETEのwhere句について

    SQL文について教えていただけないでしょうか? 力不足のため苦しんでおります。 宜しくお願い致します。 TBLいいの項目EEが100以外かつFFが50以下で 抽出される全ての項目AAをKEYにしてTBLいいを 削除したいのですがわかりません。 DELETEののwhere句について教えてくいただけ ないでしょうか?。  条件  DB:SQLServer2000   TBLああ AA BB CC DD   TBLいい AA EE FF GG  

  • nvarcharとdatetimeで作成された日付の抽出方法について

    SQL Server 2005 EXPRESSを使って、 nvarchar型で作成されたyyyy/mm/ddの日付と datetime型で作成されたyyyy/mm/ddの日付を比較し WHERE '2007/05/04' > gettime()のようなSELECT文の WHERE句を使って該当レコードを表示することが可能であれば 教えてください。 以上、宜しくお願いします。

  • なぜ、WHERE句とHAVING句があるのか?

    なぜ、WHERE句とHAVING句があるのか? SQLを学んでいる時に、疑問に思ったことがあります。 それは、「なぜ、WHERE句とHAVING句があるのか?」ということです。 この2つは、 ・WHERE句 → 表から取り出す行の条件を指定 ・GROUP BY句 → グループ化した結果から取り出す行の条件を指定 という違いがあることは分かっています。 ですが、おなじ「行のかたまりに対する抽出条件」を指定しているのに、 なぜ、わざわざ2つに分ける必要があったのでしょうか? 分けないと不都合が生じるのでしょうか。 もし、明瞭簡潔に説明できる方がいらっしゃいましたら、教えていただけないでしょうか。