- ベストアンサー
特殊な日付データ条件のSELECT文で困っています
jamshid6の回答
- jamshid6
- ベストアンサー率88% (591/669)
#1,#3です。 #4の方のコメントはもしかしたら、私のクエリが通らない可能性について書いていただいたのかもしれないと思いますが、ANSI_NULLSはIS NULL/IS NOT NULLの動きには影響をあたえません。 http://technet.microsoft.com/ja-jp/library/ms188048(SQL.90).aspx >スクリプトが意図どおりに動作するようにするには、ANSI_NULLS データベース オプションや SET ANSI_NULLS の設定とは無関係に、NULL 値を含む可能性のある比較で、IS NULL と IS NOT NULL を使用するようにしてください。 なお、UNKNOWN OR TRUEはTRUEです。 http://technet.microsoft.com/ja-jp/library/ms188361(SQL.90).aspx つまり「有効日付>=@date OR 有効日付 IS NULL」は有効日付がNULLの場合、常に成立します。 したがって、残念ながら質問者さんが自分の環境で試すに際して、正しく書き換えてくれなかったのだろうと推測します。
関連するQ&A
- 日付の条件の書き方
SQLserver2005を使い始めた初心者です. 現在,日付の条件で躓いています. 番号 日付 1 2008/10/29 2 2008/11/02 3 2008/11/01 4 2008/11/03 というようなデータベースがありまして, MAX(日付)が今日から3日前以前のデータを抽出するという, 条件を書きたいのですが何かアドバイスを頂けたら幸いです.
- ベストアンサー
- SQL Server
- SQLServer7.0で、SELECT文で列を抽出する ※Nullと0の条件について
SQLServer7.0で、SELECT文で列を抽出する際なんですが、 列A 列B --------- 1 Null 2 Null 3 1 ↑のテーブルから、列Aの1、2だけを抽出するSELECT文を SELECT * FROM XXX WHERE 列B <> 1 と作成したのですが、うまく動作しません(汗) データが一件も取れないのです。(列B:tinyint型、Null許容) テーブル内のデータをNull→0にして、同SELECT文で抽出すればうまくいったのですが。。 Nullデータを、<>XX という条件で取得することはできないんですかねえ・・・。 それとも、テーブルの設定か、条件の記述方法がまずいんでしょうか。 どなたか、ご存知あればアドバイスをお願いします。
- ベストアンサー
- その他(データベース)
- SELECT文で条件にあったテーブルからデータを取得するには?
WinServer2003,WinXP,ORACLR10g使用しています。 SQL文の問合せ(SELECT)で、条件にあったテーブルを読みデータを取得するにはどのようなSQLの記述方法が良いでしょうか、お願いします。 3つのテーブルがあります。 Kdata,M_Fuku,M_Shokuhin KdataのデータのフィールドKkubunが 1の時はM_Fukuから,5の時はM_Shokuhinから品名のデータを取得したいです。 Kdata 1 コード 2 日付 3 区分 4 数量 5 単価 M_Fuku 1 コード 2 品名 M_Shokuhin 1 コード 2 品名 日付 区分 品名 数量 単価 金額 060710 1 ジャケット 1 5000 5000 060711 5 玉子 2 100 200 このようにしたいと思っています。 よろしくお願いします。
- ベストアンサー
- Oracle
- select文の結果から新しいテーブル作成の方法
SQLは初心者で現在勉強をしています。 (SQLServer2000を使用) select文の結果から新しいテーブル作成したいのですが、下記SQLで上手くいきません。 どなたかアドバイス宜しくお願いします。 create table 新テーブル as select OrderID, Prd.ProductID, ProductName, Prd.UnitPrice from "Order Details" Ord inner join Products Prd on Ord.ProductID = Prd.ProductID (エラー内容) キーワード 'as' 付近に正しくない構文があります。 SQLserverでは 『create table 新テーブル as』の構文は使用できないのでしょうか?
- ベストアンサー
- SQL Server
- 条件をつけて日付の古い行を抜き出したい
SQLserver2005を使っています。 下記のようなテーブルがあります。 ID 処理番号 日付 Data AA 1 2008/1/1 10 AA 1 2008/1/2 11 AA 1 2008/1/3 12 AA 2 2008/1/4 13 AB 3 2008/1/5 14 AB 3 2008/1/6 15 AB 4 2008/1/7 16 この時に「IDと処理番号が一致した場合、日付の一番古い行を抜き出す」 という条件でデータの抽出をすることは可能でしょうか 結果は下記のようになります。 ID 処理番号 日付 Data AA 1 2008/1/1 10 AA 2 2008/1/4 13 AB 3 2008/1/5 14 AB 4 2008/1/7 16 下のような命令文を作ったのですが、 「Data列」が抜き出せません。 select ID,処理番号,min(日付) from テーブルA Group by ID,処理番号 一度上の命令文でテーブルを作って元のテーブルとマッチングさせるしかないのでしょうか?出来れば一発で抜き出したいです。 ご教授宜しくお願いします。
- ベストアンサー
- SQL Server
- oracle 最新日付との比較
いま、同一商品番号の最新日付を利用した条件が うまく作れず悩みながら色々試していますが、 うまくいきません。 やりたいことは、 1,AテーブルとBテーブルの 商品番号が同じ場合は除外します。 2,残されたデータから次はCテーブルの中にある 同一商品番号で、最新の日付が当月の場合はデータを残す。 つまり、前月以前のデータは除外となります。 1まではできています。 Select * from aテーブル where not exists (select 'X' from bテーブル where a.商品番号 = b.商品番号) この先上記sqlにつなげてmax関数くくった最新日付と システム日付を年月のみで比較する等試みましたが、 求めた結果になりません。 上記sqlでビューを作成してといったことは、 今回やらずに一つのsqlのみでできないかと 試行錯誤です。 よきアドバイスございましたら、 宜しくお願い致します。
- ベストアンサー
- Oracle
- ある条件のSELECT文の作成について
以下のSQLの作成で悩んでいます。 【内容】 抽出元テーブルの中で、あるコードが同じデータは、 ある項目を全て同じ値にして取得したい。 (例) ■抽出元テーブル コード SEQ FLG 1 1 1 1 2 1 3 2 1 0 2 2 2 3 3 1 1 コードは同じ物が1つ又は複数あります。 コードが同じ物にはSEQで番号が連番されます。 FLGの項目がありますが、SEQ=1のデータしか設定されていません。 ■求めたい結果 コード SEQ FLG 1 1 1 1 2 1 1 3 1 2 1 0 2 2 0 2 3 0 3 1 1 全てのデータでFLGを求めて取得します。 取得の仕方はコードが同じでSEQ=1の値を取ります。 抽出元テーブルと結果のデータ件数は同じになります。 抽出元テーブルと結果の違いは、FLGに値が埋まっているかどうかの違いのみです。 このテーブルのFLGはUPDATEする事は出来ません。 別表なども利用しないで、 selectのSQL文だけで対応したいです。 どのような方法で対応できるでしょうか? オラクルのバージョンは10gです。 よろしくお願い致します。
- ベストアンサー
- Oracle
- SELECT文での抽出条件
以下のような処理を行いたいと思いますが SQL文の作成方法を御教授下さい。 【時間DB】 YEARMONDAY,HOUR,FLG, DATA ----------------------------- 20050528 1 1 10 20050528 2 1 20 20050528 3 1 30 20050528 4 1 40 . . . 20050528 22 1 40 20050528 23 1 50 20050528 24 1 60 【日DB】 YEARMONDAY,FLG, DATA ----------------------------- 20050528 1 250 処理内容:指定された日付で日DBの作成を行う。 抽出条件:フラグが全て等しい場合はその値を取得 :フラグが一致しない場合は0を取得 上記の場合,SQL文で抽出可能でしょうか? 以上,よろしくお願い致します。
- ベストアンサー
- Oracle
- ハガキ交換データのSQL文
下記のような葉書のデータベースでのSQL分についてお尋ねします。 Parsonals データベースに、 年賀状と暑中見舞いとのデータテーブル(Cards)のほか、 個人データテーブル(Individuals)と 家族データテーブル(Family)と 住所データテーブル(Address)との4つのテーブルがあります。 4つのテーブルは、次のように構成されています。 Individuals, Family, Address, Cards です。 1.Individuals テーブルは、 ID (オートナンバー), Name (文字列), FamilyID (数値), AddID (数値) の4つのフィールド 2.Family テーブルは、 FamilyID (オートナンバー), FamilyName(文字列) の2つのフィールド 3.Address テーブルは、 AddID (オートナンバー), Address(文字列), Telephone(文字列) の3つのフィールド 4.Cards テーブルは、 CardID(オートナンバー), KindOfCard(YesNo), SendYear(数値 ヌル値許可), ReceiveYear(数値 ヌル値許可), IndividualID (数値) の5つのフィールド です。 個人データすべてのほか、個人ごとの家族データすべて、個人ごとの住所データすべて、 そして、個人ごとのKindOfCard(年賀状か暑中見舞いか)ごとにSendYearデータのうち最新のものと ReceiveYearデータのうちの最新のものを取得するSQL文を取得したいのです。 簡単にいえば、 個人個人に対して、その個々人の個人データ・家族データ・住所データのほか、 年賀状を送った最新の年と受けた最新の年、 暑中見舞いを送った最新の年と受けた最新の年を取得したいのです。 さらに、最新の送った年と最新の受けた年とが同一のときは、データが重複しますので一つに絞りたいです。 Cardsテーブルのフィールドには、SendYearもReceiveYearもありますので、単純にSendYearとReceiveYearを切り分けると当然データが重複するので、この重複は避けたいです。 このように毎年の葉書のやり取りを記録したデータから必要なデータを取り出したいというものです。私にとっては来年の年賀状を送るにあたって、どの人に出すべきかを判断する材料として、ぜひ取りだしたいビューなです。 かなり複雑なSQL文になるのかもしれませんが、どんなSQL文かを教えてください。 ぜひ、よろしくお願いします。
- ベストアンサー
- その他(データベース)
- select文のサマリー
select sum(A.列名1) --列名1の型はnumber from テーブル名 A where A.列名2 = 定数 and A.列名3 <> 定数; と言った簡単なSQLなのですが、 結果としてnull値が返ることはあるでしょうか? count では必ず数値が返ると思うのですが・・・sumの場合もヒットする値が1件もなかった場合0が返るのでしょうか? また、sum()またはcnt()でnullが返されるような条件があるとしたらどんな時でしょうか?
- ベストアンサー
- Oracle
お礼
いろいろと回答いただきありがとうございます。貼っていただいたURLとても参考になりました。考え方も教えていただきありがとうございます。SQLもっと勉強します。