- ベストアンサー
where文について
2008-10-28のような形式でMYSQLに生年月日を登録しています。 フォームのセレクトボックスにて誕生月のみを取得しlike文では なくwhere文でデータの読み込みを行いたいのですがどうやれば できるのでしょうか? 通常だと "SELECT * FROM テーブル名 where カラム名 = '200-10-28' " でいけると思うのですが誕生月のみの情報で "SELECT * FROM テーブル名 where カラム名 = '10' " とやっても無理ですよね^^; $_POST['birth_month']で誕生月を取得し数字は01~12までです。 ※取得は問題なくできておりわからないのがwhere文の書き方です。 できるだけシンプルな方法で行いたいのですがお分かりになる方が おりましたら是非ご教授お願い致します!
- dcx147
- お礼率33% (214/636)
- PHP
- 回答数3
- ありがとう数1
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
シンプルに! "SELECT * FROM テーブル名 where DATE_FORMAT(カラム名, '%m') = '10' "
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
SELECT * FROM テーブル名 where MONTH(カラム名) = '10' でいけそうですが、インデックスなど高速処理はできません。 インデックスが必要であれば、月を独立したカラムや外部テーブル で別管理することをおすすめします (まぁよほど膨大なデータでないかぎり、今回の件はインデックスが かならずしも必要だとはおもいませんが)
こんにちは。 こちらで、いかがでしょ? SELECT * FROM テーブル名 WHERE substring(カラム名, 6, 2) = '10' 【2008-10-28】の頭から6番目より2つ抜き取る
関連するQ&A
- select文について
現在、"user"というテーブルに"id"と"date(datetime)"という項目があり、その"date"にあるデータの中から月を指定して抽出したくて以下ようなSQL文を書いたのですがうまくいきません。 SELECT `id` FROM `user` WHERE convert((SELECT extract(month from `date`) FROM `user`), INTEGER) = 9 mysql5.0です。 よろしくお願いします。
- ベストアンサー
- MySQL
- WHERE カラム名 <> ''の意味
$result = $db->query("SELECT カラム名 FROM テーブル名 WHERE カラム名 <> ''"); PHPでSQL文を作成しているサンプルがあるのですが、「WHERE カラム名 <> ''」の意味が分かりません。カンマ二つで空文字? これはどういう意味でしょうか? また、<>は何と読むのでしょうか?(検索したいので)
- ベストアンサー
- MySQL
- SQL文について
テーブルの結合について教えてください。 (DBはオラクルです) select * from table1,table2 where table1.カラム名=table2.カラム名; で、結合が出来ることは分かりました。 やりたいことはテーブルの結合と、ある期間のデータを持ってきたいのです。 select カラム名 from table1 where カラム名 between '20020213' and '20020218'; で期間を決めて引き出すやり方も分かっています。 一度に結合と期間を決めて引き出すやりかたってどうすればよいですか? それとも不可能ですか? 教えてください。
- ベストアンサー
- その他(プログラミング・開発)
- InformixのSQL文Where句で
マイナーなRDBS(?)なので回答をいただけるか不安ですが… InformixのSQL文(単純なSELECT文)で、以下のような 文の場合、検索条件はどのような解釈になるのでしょうか? select count(*) from テーブル名 where カラム名 = ? です。 要は「?」が何を示すのかが分からないのです。 matches(Oracleでいうlike)の場合、Oracleの%が*に、 _(アンダースコア)が?になるらしいのですが、 = で完全一致で繋いださいにどうなるのかが分かりません。 ちょっとした情報でもよいので、ご教授お願い致します。
- ベストアンサー
- その他(データベース)
- DELETE文とロックについて
DELETEしようとしているレコードがロックされている場合は、削除せず すぐに処理を戻したいです。イメージ的にNOWAITが最適と思い →DELETE FROM テーブルA WHERE カラムA = 'A' NOWAIT としたいところですが、NOWAITはSELECT文でしか指定できないとのことなのでNGです。 SELECT文で抽出した条件のレコードを削除する場合 →DELETE FROM テーブルA WHERE カラムA = (SELECT カラムA FROM テーブルA WHERE カラムA = 'A') と出来ます。 又、SELECT文でロック待機時間なしの場合 →SELECT カラムA FROM テーブルA WHERE カラムA = 'A' FOR UPDATE NOWAIT と出来ます。 これらを組み合わせて、ロックされているレコードを削除しようとした場合、 すぐにNGで制御を戻すように、次のように記載してみました。 →DELETE FROM テーブルA WHERE カラムA = (SELECT カラムA FROM テーブルA WHERE カラムA = 'A' FOR UPDATE NOWAIT) なぜかNGになってしまいます(右カッコがありませんと言われます)。 なぜこの書き方が出来ないのでしょうか? 現在、一度該当のレコードをSELECT文でFOR UPDATE NOWAITをしてから DELETEをしています。 1つレコードを削除したいだけなのに、わざわざSELECT文と DELETE文を発行してしまっています。 こういう場合、他にどのような方法があるのでしょうか? 宜しくお願いします。
- ベストアンサー
- Oracle
- 二つのcount()を一文で
Select count(COLUMN_A) from TABLE_A where USERID=1 and FLAGS=1; Select count(COLUMN_A) from TABLE_A where USERID=1 and FLAGS=2; を1つの文で取得する方法はないでしょうか?
- ベストアンサー
- MySQL
- UPDATE文の副問い合わせ
こんばんわ。 今少し書き方がわからないSQL文があって困っています。 テーブルA(データが入ってるテーブル)に 新規でカラムを追加したので、 今UPDATE文を使いたいと思っています。 膨大なので、1つ1つする訳にはいかないので、 条件指定して、あるカラムにあるとある条件に合致するものは 新規カラムの値が4とか ある条件なら、新規カラムの値が6などと入れたい感じです。 自分なりに調べて UPDATE テーブル名 SET 新規カラム = 値 WHERE (SELECT * FROM 同じテーブル名 WHERE 条件) だと思って色々書いたり試行錯誤したのですが、 全然できませn。 どのように書けばよろしいのでしょうか? またUPDATEをかける際の条件指定に2つの違った 条件(同じカラムの違う条件、または別カラムの条件) を入れることは可能でしょうか? 回答いただけるとありがたいです。 よろしくお願いします。
- ベストアンサー
- MySQL
- access97に2001年のデータ検索
アクセス初心者のyaschiです。 よろしくお願いいたします。 テーブル入力されているデータを日付を条件に 取得しようと思い、以下のようなSELECT文を作りました。 SELECT * FROM AAA WHERE 年月日=#99/03/17#; このSELECT文の場合、きちんとデータを取得できるのですが、 2001年1月10日のデータを取得しようとしてWHERE句を 以下のように変えたところできませんでした。 WHERE 年月日=#01/01/10#; 2000年の問題かと思い2000年11月20日のデータを取得しようと WHERE句を以下のように変えたら今度は取得できました。 WHERE 年月日=#00/11/20#; なぜ、2001年のデータだけ取得できないのでしょうか?
- ベストアンサー
- オフィス系ソフト
- WHERE文の中で除算
SQLのWHERE文の中で計算をしているのですが、「除数が0です」とのエラーがでてしまいます。 同じ計算をSELECT文の中にいれると、エラーにならず、計算結果がでるのですが、どうしてでしょうか? SELECT DATA, (A + B - C) / (A + B) * 100 FROM table ↑この時は計算結果がでます。 SELECT DATA FROM table WHERE (A + B - C) / (A + B) * 100 <= 50.0 ↑「除数が0です」といわれてしまいます。
- 締切済み
- Oracle
- select文、asで定義した桁をwhereで使用可能?
SELECT ( IF(substring(p.TDATE,1,6) = '200407' ,p.PRICE,999999999) ) as 'MONTH1' from TBL_PRICE p where MONTH1<999999999 ; ↑こんな感じで使いたいのですが、これはエラーに なります(これをそのまんま使用するわけではないので、 このSQL自体へのツッコミはとりあえずいいです) >ERROR 1054: Unknown column 'MONTH1' in 'where clause' asで定義した桁をwhereで使用することはできますか?
- ベストアンサー
- MySQL
お礼
お返事ありがとうございます。 多数の方法があり驚きましたが全て成功でした☆ なかなかwhere文での応用がわからず苦労しておりましたが 皆様のおかげで無事に解決です! この場を借りてお礼とさせて頂き解決と致します。 ありがとうございました^^