• 締切済み

検索する文字列のデータが空の場合もその対象にしたい

検索する文字列のデータが空の場合もその対象にするには、 SELECT * FROM `table` WHERE 1 AND `s1`='あああああ' AND `s2` IN('いいいいい',NULL) のようにするのでしょうか? 数値の場合はデータが無いのを0で表現すれば、 SELECT * FROM `table` WHERE 1 AND `m1`<=100 AND `m2`<=250 で良いですよね?

  • MySQL
  • 回答数2
  • ありがとう数0

みんなの回答

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.2

SELECT * FROM `table` WHERE 1 AND `s1`='あああああ' AND ifnull(`s2`,'いいいいい') = 'いいいいい' なんて方法もあります。 ※ifnull()は、MySQL5.1の文法書を参照して見つけています。 http://dev.mysql.com/doc/refman/5.1-olh/ja/control-flow-functions.html 使っているVerによって違うかもしれませんから確認してください。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

NULLのデータを拾いたいならIS NULLですね 当然NULLと''は違うので注意してください create table hoge (id int,s1 varchar(10) null,s2 varchar(10) null); insert into hoge values(1,'aaa','iii'),(2,'aaa','uuu'),(3,'aaa',''),(4,'aaa',NULL),(5,'eee','ooo'); select * from hoge where 1 and s1='aaa' and (s2 ='iii' or s2 is null);

関連するQ&A

  • 長さ1の空文字列?

    タイトルの通り、長さ1の空文字列で困っています。 現在、Linux、Apache、MySQL、PHPを使って3階層アプリケーションを作っています。 予めMySQLでテーブルの形を決めておいて、CSVからデータを読み込ませておき、 PHPでSQL文を実行してレコードを取得することで、それらをユーザに表示という感じです。 複数あるカラムのうち、空文字列(CSV上でブランクだったもの)は表示させたくないので、 PHPで「 if(カラム=="")~ 」のように比較することで、空文字列だけ避けるつもりでした。 しかし上手くいかなかったので、strlen()で調べて見たところ、返り値が1でした。 本来は空文字列に対してstrlen()は0或いはfalseの返り値を返しますよね。 is_empty()でも空データ扱いにならず、当然NULLの扱いでもありません。 そのため、実データとの区別が出来ずに困っています。 何故、空文字列のカラムを除外したいかというと、 DB上のユニークなレコードを検索したいからです。 select * from where カラム='データ' and カラム='データ'… という風に。 「カラム=''」としてしまうと検索に引っかからなくなってしまいます。 どうすればよいでしょうか。 以下はそれぞれのバージョンです。 MySQL:5.0.95 PHP:5.1.6 Linux:RHEL5 Apache:2.2.3

    • ベストアンサー
    • PHP
  • 空文字

    プログラム初心者です 空文字をdbに入れた場合、dbのカラムの値はなしになるのでしょうか? それとも、見えないけどなにか入ってしまうのでしょうか? nameが空文字の場合 $name = $_POST['neme']; UPDATE table SET name=$name WHERE id=1 空文字はNULLを指定した場合と同じ結果になりますか? UPDATE table SET name=NULL WHERE id=1 よろしくお願いします

    • ベストアンサー
    • PHP
  • 同じテーブルでのUNION

    テーブルtableである列aのデータが1,2,3,4,5,6,7,8,9と 入っていたとします。 このテーブルを1,2,5,3,4,6,7,8,9という順番で SELECTしたい場合はどのようにすればよろしいでしょうか? select a from table where a IN (1,2) union select a from table where a = 5 union select a from table where a NOT IN (1,2,5) としてみたのですが1,2,3,4,5,6,7,8,9と表示されてしまいます。 宜しくお願いいたします。

  • 文字列のフィールドのOrderbyについて

    Oracle9iです。(厳密にはVB6も絡んでいます) 説明の便宜上、若干簡略化しています。 テーブルtestがあります。 SQL> desc test; 名前 NULL? 型 --------- -------- ---------------- ID VARCHAR2(10) です。 (1)testテーブルのデータが、 SQL> select id from test ; ID ---------- 3 5 11 551 のとき、select id from test where id between 1 and 4;を実行すると、 ID ------- 3 select id from test where id between '1' and '4';を実行すると、 ID ------- 3 11 となってしまいます。 別のケースで、 SQL> select id from test ; ID ---------- 3 5 11 551 C44433 aaa 6行が選択されました。 のデータの場合、 select id from test where id between 1 and 4;はORA-01722:数字が無効です のエラーとなり、 select id from test where id between '1' and '4';だと ID ------- 3 11 となってしまいます。 自分の希望としては select id from test where id between '1' and '4'にて、 ID ------- 3 のみ表示をさせたいです。 (2)SQL> select id from test ; ID ---------- 3 5 11 551 C44433 aaa のとき、たとえば、 select id from test where id between '12' and 'DD'; を実行し、12以上でDD以下のデータを取得したいのですが、 (理想) ID ---------- 551 C44433 実際は、 ID ---------- 3 5 551 C44433 と出てしまいます。 仕様は上司が考えてるので、 テーブル構造にそもそも問題があるのならそれ相応の説明をしたいと思っています。 ですが、基本的にはSQLの条件文を変更したいのですが、 アドバイスをいただけたらと思います。 ちなみに説明の簡略化のためフィールドを少なくしていますので select RPAD(id , 10) from test where ~ のように select のあとに変換するのはできません。 実環境は基本的には select * from ~としたいので。 よろしくお願いいたします。

  • SQLServerのNULLのデータと空文字のデータを抽出する方法を教

    SQLServerのNULLのデータと空文字のデータを抽出する方法を教えてください! いつもお世話になっております。 下記のコードで、空文字とNULLのデータがないときはデータが抽出できました。 どなたかご教授お願いいたします! ==開発環境== SQLServer2000 VB6.0 =================================================== 【VB6.0】 '■リストボックスがあり、チェックが入っている場合は、NULL値を渡し、チェックが入っていない場合はチェックボックスのデータ(名称)をパラメータとして渡します。 '■ただし、リスト名の「(空)」にチェックが入っている場合はNULLと空文字(” ”)のデータを抽出しなければなりません!! If objList.Selected(lngListCnt) = True Then If objList.List(lngListCnt) = "(空)" Then '★★★ここが分かりません!!! .Parameters("@Ivch" & strArry(intCnt) & "List" & lngListCnt) = "NULL"←??? Else '■チェックが入っているものは検索対象の為、NULLを渡す .Parameters("@Ivch" & strArry(intCnt) & "List" & lngListCnt) = Null End If Else '■チェックが入っていないものは検索対象外の為、リストボックス内のデータの名称を渡す。 .Parameters("@Ivch" & strArry(intCnt) & "List" & lngListCnt) = objList.List(lngListCnt) End If ========================================= 【SQLServer2000】 CREATE Procedure … ( @IvchList0 VARCHAR(10), @IvchList1 VARCHAR(10), @IvchList2 VARCHAR(10) @Oint件数 INT OUTPUT) AS --■条件に合致する件数を取得し、返します SELECT @Oint件数 = COUNT(*) FROM TB取込 WHERE ((Aテーブル.あ列 <> @IvchList0) OR (@IvchList0 IS NULL)) AND (((Aテーブル.あ列 <> @IvchList1) OR (@IvchList1 IS NULL)) AND (((Aテーブル.あ列 <> @IvchList2) OR (@IvchList2 IS NULL)) ・ ・ ・ 以上です。よろしくお願いします!

  • PDOのデータ取得方法について

    お世話になります。 以前まで「mysql_query」でSQLを実行していたのをPDOで行うように変更しております。 prepareの「?」の部分までのSQLにした場合(1)、データ取得出来ますが (2)ですとエラーも返ってこなくデータ取得出来ません。 色々と試してはいますが、全く出来なくて大変困っています。どうかご教示くださいませ。 1)SELECT * FROM table WHERE data_code = ? and data_code2 = ? 2)SELECT * FROM table WHERE data_code = ? and data_code2 = ? and (data_code3 = "null" or data_code3 is null or data_code3 = "") ※PHP5.3、MySQL5.0です。

    • 締切済み
    • PHP
  • カンマ区切りの文字列を検索する

    「1,2,3,5,10…」のようにカンマ区切りになっている文字列が格納されているカラム(number)があり、その文字列に含まれている数字と検索用配列「1,2,3」と比較して存在すれば抽出するみたいなことがやりたいのですがよくわかりません。 カンマ区切りではなく単一の数字であれば select * from tests where number IN(1,2,3); みたいな感じでnumberがIN()のなかにあるかどうかで抽出できると思うのですが、この場合はどのようにすればよいのでしょうか。 ちょっと説明が下手でわかりづらいかと思いますがよろしくおねがいします。

    • ベストアンサー
    • MySQL
  • 空白文字を含む文字列データの検索

    検索したいデータに空白がある時空白のない検索文字列でlike検索して データがヒットするようにしたいです col1 NTTデ ー タ NTTデ - タ シ ス テ ム ズ NTTデ ー タ ク オ リ テ ィ 日立製作所 IBM このようなカラムのデータが入っているとします ※空白を含むデータや空白を含まないデータがあるとします これを select * from table1 where col1 like '%NTTデータシス%' とするとNTTデ ー タ シ ス テ ム ズが検索されるようにしたいと思っています。 replace関数を使って実現しようと思ったのですが SELECT REPLACE(col1,' ','') as col1 From table1 where col1 like '%システムズ%' これだとデータがヒットせず単純に表示するときに空白が削除されるだけです どうすれば空白を含むデータを検索することができるでしょうか できれば全角・半角両方を含む文字のデータでも検索できるようにしたいです SQLServer 2005を利用しています。

  • InterBase(firebird)で固定文字列と文字列型フィールドのunionでエラー

    お世話になっております。 InterBase(firebird)のunionについての質問です。 あるテーブル(test_table)に test_cd VARCHAR(2) ; というような、文字列があるとします。 これを単純に抽出するSQL と、固定文字列を値の代用とするSQL をunionで求めようとした際に、以下のSQLで問い合わせました。 select test_cd from test_table where [条件] union select '00' test_cd from test_table where [条件] 問い合わせた際に以下のようなエラーが返ってきました。 Dynamic SQL Error SQL error code = -104 Invalid command Data type unknown それぞれのSQLは正しく返ってくるのですが、 unionで結合した際にこのエラーが返ってきます。 どのように対処すればよいのでしょうか、 ご回答をよろしくお願いいたします。

  • [ASP+SQLserver]空白フィールドのWHEREは?

    こんにちわ。 ASPとSQLサーバで簡単なWebを作っています。 まず、以下のようなデータがあるとします。 (列名) 列A,列B,列C (データ)aaaa,NULL,NULL      bbbb,1111,NULL ※NULLは文字列ではなくNULLです。 そこでNULLであるレコードを取得したいので次のようなクエリで実行してみました。 SELECT * FROM sample WHERE(列B='') ORDER BY 列A しかし、あえなく敗北・・・。 また、NULLでないレコードを取得するために、 SELECT * FROM sample WHERE(列B<>'') AND(列C<>'') ORDER BY 列A しかし、こちらもあえなく敗北・・・。 こういうケースはどのようなクエリでやればいいのでしょうか? お手数をお掛けいたしますが宜しくお願いいたします。