• ベストアンサー

MySQLで数字の値のもののみを取り出す

SELECT * FROM `sample_table` WHERE 'test' REGEXP '^[0-9]+$' と記述し、「test」内の値が数字のもののみを取り出そうと思いましたがうまくいきません。 1や2、3などの数字だけの値があるにもかかわらず、返り値が空になります。 WHERE NOTとすると全ての列が表示されるので、REGEXPが上手く宣言できていないのかとも思いますが、原因・対策共にわかりません。 どのようにすれば、数字のもののみを取り出すことができるのでしょうか。

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

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

× 'test' ○ `test` そりゃ文字列'test'に正規表現かけてもヒットしませんね・・・

hukazuo
質問者

お礼

ありがとうございました。 単純ミスで恥ずかしいです^^;

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • MYSQLで複数の値を検索して取得するには?

    お世話になります。 MYSQLとPHPを見よう見まねでやっている超初心者です。 $_POST['sample']はチェックボックスから取得してきたので複数の値があります。 その複数の値をwhere data = $where";にしてdataから複数の検索結果を取得したいと思っているのですが、下記のように書くと複数ある$_POST['sample']の一つしか検索取得できません。 $_POST['sample']の複数の値の検索結果を取得するにはどうすればよろしいのでしょうか? 基本的な事がわかっていない超初心者ですので できれば具体的な式を教えて頂ければ大変助かります。 ご教授よろしくお願い致します。 if (isset($_POST['sample'])) { for ($i = 0; $i < count($_POST['sample']); $i++) { $where ='' . h($_POST['sample'][$i]) . ''; } } function h($string) { return htmlspecialchars($string, ENT_QUOTES); } ///// $sql = "select * from test where data = $where"; $result = mysql_query( $sql );

    • ベストアンサー
    • PHP
  • mysql 正規表現について

    以下のようなテーブルがあるとして +------+ | memo | +------+ | aaaa | | bbbb | | cccc | +------+ 『memoフィールドに「a」もしくは「b」を含まない』という条件式を書きたいのですがうまく行きません… 結果として「cccc」を取得できれば良いのですが… SELECT * FROM test1 WHERE memo REGEXP '!(aa|bb))'; ↑上記のように書いてみると、なにも抽出できず…。 どのようにWHERE句を記述すれば 「a」もしくは「b」を含まない、「cccc」を取得する事ができるのでしょうか? ご回答お待ちしております。

    • ベストアンサー
    • MySQL
  • MySQLのUPDATE文でサブクエリ

    MySQLのUPDATE文でサブクエリの使い方について教えて下さい。 MySQLのUPDATE文でサブクエリを使うと「#1093 - You can't specify target table 'exam' for update in FROM clause 」というエラーになってしまいます。 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 ということはわかりましたが、これに従いSQL文を変更してもうまくいきません。 どのようにSQL文を作ったら良いか教えていただければと思います。 環境 PHP:5.1.6 MySQL:5.0.77 ------具体的なSQL文--------------------------------------- テーブル名:sample カラム名:date(DATETIME型),name,flag 上記テーブルに対して、 1.社員(列名:nameのsuzuki)の最新出勤日(列名:date)のflagを1にする 2.社員(列名:nameのsuzuki)の最新出勤日以外(列名:date)のflagを2にする という処理をしたいと思います。 まず、SELECT文を作ってみました。 1.最新出勤日データを抽出 SELECT * FROM sample WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 SELECT * FROM sample WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' これをUPDATE文に変更すると、 #1093 - You can't specify target table 'exam' for update in FROM clause というエラーになります。 上記をUPDATE文に変更 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) from sample)) and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) FROM sample)) and name='suzuki' エラー文を検索したところ下記のような情報を見つけることができました。 「仕事SPOT」 MySQLでサブクエリ(エラー#1093を回避する方法) http://wsjp.blogspot.com/2009/12/mysql1093.html 「あるテーブルに対してデータを追加・更新する場合、同じテーブルをサブクエリーに使えない」 「サブクエリー内のFrom句はテンポラリテーブルとして扱うことが可能」 と記載されています。 このページに掲載してあるように変更を加えてみました。 1.最新出勤日データを抽出 UPDATE sample SET flag=1 WHERE (date= (select max(date) as test_max from sample)) as text_tb and name='sizili' 2.最新出勤日以外のデータを抽出 UPDATE sample SET flag=2 WHERE not (date= (SELECT max(date) as test_max FROM sample)) as test_tb and name='suzuki' これでもエラーになってしまい、うまくいきません。

    • ベストアンサー
    • PHP
  • select max~の値の取得方法

    select Max(x) from table where y=1 基本的なことかもしれませんが、上のようなクエリを実行したときの値の取得の仕方を教えてください。 単純に query="select Max(x) from table where y=1" a=Execute query としたら「ステートメントの末尾が不正です。」というエラーが出ました。

  • MySQLから取り出したものを3つに分ける

    MySQLに以下のようなSQLを打ちました。 create table table_list( id int, task varchar(255) ); insert into table_list values(1,'ほげほげ1-1'); insert into table_list values(1,'ほげほげ1-2'); insert into table_list values(2,'ほげほげ2-1); insert into table_list values(2,'ほげほげ2-2'); insert into table_list values(3,'ほげほげ3-1'); そして、空のdiv要素が3つあります。 このデータベースからidの数値別に、div要素へtaskの文字列を入れたいのですが、どうすればいいのでしょうか? SQLで「select * from table_list」をやってからtaskを取り出すのか、3回SQLで「select task from table_list where id=1」のようにするのがよろしいんでしょうか?

    • ベストアンサー
    • PHP
  • 指定値を否定した条件で、NULLも含めた指定値以外を取得

    指定値を否定した条件で、NULLも含めた指定値以外を取得できる方法はありますでしょうか。 使用DBはMYSQLです。 test_table ID,name,value ----------- 1,aaa,100 2,bbb,NULL 3,ccc,300 4,ddd,100 5,eee,NULL SELECT * FROM test_table WHERE value = 100; valueが100のもの、ID:1,2を取得していたのですが、 100以外のものを取得する必要がでてきました。 SELECT * FROM test_table WHERE NOT(value = 100); こうすると、ID:3しか返ってきません。 valueがNULLのものも含めて取得したいのです。 NULLの値があることを考慮すれば、以下のような形で取得はできるのですが、 SELECT * FROM test_table WHERE NOT(value = 100) AND value IS NULL; value = 100という条件に、NOTをつけるかつけないかのような簡単な方法でNULLまで取得したいのです。 実はコーディング中に悩んでいるのですが、 動的ページなため、WHERE条件が定まらないのとかなりの数になります。 当初の予定では、全ての条件を()で囲んでNOTをつけるだけにするつもりでした。 これができないとなると、一つ一つ条件を見てNOTを付加+IS NULLの条件追加をしないといけなくなりそうです。 なにか良い方法がありましたらご教授願います。

    • ベストアンサー
    • MySQL
  • Oracle 9iで英字を含まないレコードの検索

    SQL初心者です。 oracle 9iの環境で「あるカラムに英字を含まないレコードを取得する」というのがあります。 私は10gを使用しているのでREGEXP_LIKE(カラム名_NO,'[A-Z]')とするつもりでした。 ところが9iはREGEXP_LIKEをサポートしていないということです。 ではどうすればできるのかというので困っています。 10gのselect文 select * from table_a where regexp_like(item_a,'[A-Z]') これを9i環境ではどのように記述すればよいのでしょうか?

  • 同じ値が存在しないレコードの抽出方法について

    下記のテーブルの中で、 b_tableテーブルのidフィールドの値が1つしかない(重複していない)フィールドを抽出したいと思います(この場合ですが、3002と3004を抽出したいです)。 その際、抽出条件を下記の【※※※ここに記述を追加※※※】に記述することで実現したいと思ったのですが、その場合どのようなsql文を書けば良いか分かりませんでした。 その為、このような場合、どのようなsql文を書けば良いかご存知の方がいらっしゃいましたら、ご教示の程、よろしくお願いします。 なお、【※※※ここに記述を追加※※※】に記述を追加したい理由ですが、既存のSQL文にこの条件を追加したいのですが、WHERE以前は別の部分に記述されており、その部分が変更できない為です。 なお、下記のWHERE以前の記述はあくまでサンプルであり、重複していないフィールドを抽出するSQL文と直接関係のない記述でしたら、変更していただいても大丈夫かもしれません(この点曖昧で申し訳ございません。移植元の記述ではテーブルを連結しているように見受けられたため、連結の仕方が多少変わる分には問題ないのかなと思っています。この点については実際にソースをご提示いただければ、それを元に移植させていただいた上で、ご回答差し上げたいと思います)。 ■SQL文 SELECT a.id FROM `a_table` AS a LEFT JOIN `b_table` AS b ON a.id = b.id WHERE 【※※※ここに記述を追加※※※】 ■a_tableテーブル CREATE TABLE IF NOT EXISTS `a_table` ( `auto_id` int(3) NOT NULL, `id` varchar(4) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `a_table` (`auto_id`, `id`) VALUES (101, '3001'), (102, '3002'), (103, '3003'), (104, '3004'); ■b_tableテーブル CREATE TABLE IF NOT EXISTS `b_table` ( `auto_id` int(3) NOT NULL, `id` varchar(4) NOT NULL, `no` varchar(1) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8; INSERT INTO `b_table` (`auto_id`, `id`, `no`) VALUES (101, '3001', '1'), (102, '3001', '2'), (103, '3001', '3'), (104, '3002', '2'), (105, '3003', '1'), (106, '3003', '2'), (107, '3004', '1'); 以上、よろしくお願いします。

    • ベストアンサー
    • MySQL
  • PHPで、配列に値をうまく入れれません。

    PHP初心者です。 PHP、Mysqlを使い、検索サイトを作ろうとしています。 チェックボックスでチェックされた値を、一覧.phpに送り、 if(チェックされた値) { $sql1 = select * from table where like '%検索%'; } $sql1の結果を配列に入れて、そのidで以下のように絞込をしたいのですが・・・ $sql2 = select * from table id = $sql1(ここで例えば2,5,7とかって入ってほしい); ググってfetchやらなんやら試したのですが、2,5,7がはいってたとしたら、最後の7だけしか取り出せなかったりと苦戦しています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • まったく別のテーブルの結果MYSQL

    table_1 id name age table_2 id book title city day SELECT * FROM table_1 WHERE id=? SELECT book,title FROM table_2 WHERE city=? このようにまったく別のテーブル カラム数も違う WHEREの?も違う これを一つのSQL文にまとめたいのですが。 UNIONなどを使ってもうまくいきませんでした。 ご教授お願いいたします。

    • ベストアンサー
    • MySQL
飲食店出禁を言い渡されました
このQ&Aのポイント
  • 私は友人に連れられて行った店で、気に入って月に3回は通っていました。しかし、店主の体調悪化や亡くなり、息子から出禁を言い渡されました。
  • 店主の奥さんから謝罪の電話があり、また来てほしいと言われましたが、出禁との間でどちらが優先されるのか疑問です。
  • 出禁の理由は月に3回の来店と飲食代が赤字だということでしたが、私は迷惑行為をした覚えはありません。
回答を見る