• 締切済み

SQLでデータを整形して取得可能でしょうか?

■testテーブル |pk|file_name +--+-------------+ 1 |55_ファイル名 2 |56_ファイル名 のうようにMySQLのカラムにデータが入っているのですが、file_nameを 最初の数字とアンダーバーをカットした、ファイル名の文字列を SQLで取得したいのですが、何らかの書き方で実現できるでしょうか? REGEXPという関数があることまではわかりましたが、 私の頭では難しくてわかりませんでした・・よろしくお願いします。

  • php4
  • お礼率42% (373/888)
  • MySQL
  • 回答数1
  • ありがとう数2

みんなの回答

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

substring(file_name, 4) ではだめなんですか?

php4
質問者

お礼

今回は55_の連番の桁数がかわってしまう為難しいです。 しかしながら、大変参考になりました。ありがとうございました。

関連するQ&A

  • PHPにてSQLから取得したデータを使いまわしたい

    データ(テーブル名:os) id,name_a,name_b 1,マイクロ,ソフト 2,マッキン,トッシュ 3,リ,ナックス というテーブルがあり <?php $sql = mysql_query("SELECT * FROM os WHERE name_b LIKE 'ソフト'"); while($ck = mysql_fetch_assoc($sql)){ } ?> とした場合 whileの中では、echo $ck[name_a]; とすればこの場合「マイクロ」と表示されますが whileの外でも表示させたい場合はどうすれば効率がいいでしょうか? 一つは、whileの中で$a = $ck[name_a]; $b = $ck[name_b]・・・と入力すればいいのですが フィールド数が結構な数ある為に効率が悪いです。 また、 list($ck2[],$ck2[],…) = $assoc; というようにlistを使ってもつらつらと書かなければなりません。 もしくは、mysql_fetch_assocをrowに書き換えて for($i=0;$i<count($ck);$i++){ $ck2[$i] = $ck[$i]; } としてしまうか、 現在htmlで作業しているのですが <?php while(){ ?> <?php echo $ck[name_a]; ?> <?php } ?> がいいかな。と思ったりするのですが なにぶん素人の考えなので、実際に仕事等で利用されている方は どのようにして使用しておられるのか教えて頂けると幸いです。 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • SQLで取得したフィールドをSQL文として利用

    お世話になっております。 MYSQLで sql_id (int PK) sql_data (text) のようなテーブル(sql_db)を持ち select sql_id from where (sql_data をsqlとして実行した結果 ) > 200 のように、フィールドから取得した値をSQLとして実行したりする方法はございますでしょうか。 ご教授よろしくお願いいたします。

  • MySQL,PHPを使いデータとデータ件数を取得する関数

    よろしくお願いします。 このようなテーブルがあります。 テーブル名GAME id name    price  genre_id  comment 1 FF1    100  1  おもしろい 2 カービー 200 3 丸い赤 3 バイオ   250 2 怖い : : : : : テーブル名GENRE genre_id genre_name 1 RPG 2 ホラー 3 バイオ このようなテーブルがあるとして、 検索したいカラム(id,name,g_id,comment)に対して検索キーワードに部分一致をしたものデータからソートしたいカラムと昇順降順のようにソートしページ数から (ページ数-1)*10+1 ~ ページ数*10 最終ページのときは (ページ数-1)*10+1 ~ 最終ページ の部分のデータを取得する関数を作りたいです。表示するデータは id name genre_name です。 ページャーも使うので検索カラムにたいして検索ワードに部分一致した結果件数も戻り値として返したいです。 上記のsql文を教えてください。 またデータと結果件数を返す関数を作ることは可能でしょうか? 関数の引数は以下のように5つにするつもりです。 function getList($search_column,$search_word,$sort_column,$sort_order,$page_number) どうかご教授ください。

    • 締切済み
    • PHP
  • mysqlの関数でereg_replace

    レコードから、特定のドメインを含むURLを消去する、といった動作をmysqlの関数で実現しようと考えてます。phpで言うところのereg_replace()のような関数がmysqlであるかどうかということです。 以下のように"bbs"というテーブルの"com"というフィールドからURLに値する文字列を消去するSQL分を実行しましたがこれは動作しませんでした。 update bbs set com = replace(com,regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)','') where com regexp '(https?|ftp|news)(://[[:alnum:]\+\$\;\?\.%,!#~*/:@&=_-]+)'; replace関数の第二引数にregexpを使用することができませんでした。(やり方が間違ってるのでしょうか?) phpのereg_replaceを使用してフィールド"com"に含まれるURLを消去していくというやり方で実現は可能なのですが、動作の軽さやソースのシンプルさを考え、SQL文で実現することを考えてます。 mysqlのヴァージョンは3.23.58です。 よろしくお願いいたします。m(__)m

  • SQLの書き方

    わからないので質問をさせて頂きます。 テーブルAに、money、rank、name、IDと言うカラムがあります。 テーブルBに、IDとpointと言うカラム名があります。 テーブルAのIDを指定し、テーブルBに同じIDが存在する場合 テーブルAとBの値を取得するSQLを書いています。 Select テーブルA.money,テーブルA.rank テーブルA.name,テーブルA.ID,テーブルB.point FROM テーブルA,テーブルB Where テーブルA.ID = '5'; このように書くとmoney,rank,name、IDは重複して表示がされ pointに関してはすべてのpointが表示されてしまいます…。 重複するのでdistinctを使ったのですが うまくいかず…。 SQL初心者ですが、よろしければ教えてください。

    • ベストアンサー
    • MySQL
  • SQLのデータから連想配列を作成したい

    あるPHPがあります。 このPHPは配列$food = array('orange','apple','sugar','spice','cake');を基にさまざまな処理を行っているのですが、 配列内部の要素の数が大きくなってきたので、sqlを使用して$foodを作成しようと思います。 データベース名dbname、テーブル名Tableとして、nameカラムのデータから$foodを作成…つまり、 ---------------------- Table  ------+ name | ------+ orange apple sugar spice cake ---------------------- ↓ ↓ $food = array('orange','apple','sugar','spice','cake'); などとしたいのです。 mysql_fetch_arrayなどを使用すればできると思うのですが、自分ではどうにもうまくいきません。 ↓はgoogleでの検索条件を基に、私が書いたコードです <?php $link = mysql_connect( $hostname, $uname, $upass); mysql_select_db( $dbname, $link) $res = mysql_query( "SELECT * from {$name}", $link); while( $food = mysql_fetch_assoc( $res ) ){ } ?> どこのコードがおかしいのか教えてください。 また、できれば上のデータベースから$foodを作成するPHPを教えてください。 どなたかご教示のほど、どうかよろしくお願いします。

    • ベストアンサー
    • PHP
  • acsessのSQLでフィールド名と説明(コメント)を取得する方法

    AcsessのSQLでフィールド名と説明(コメント)を取得する方法はありますでしょうか? オラクルでしたら SELECT [COLUMN_NAME], [RTRIM(COMMENTS)] FROM テーブル名 で取得できる様ですが、Acsessはだめでした。 よろしくお願いいたします。

  • TIMESTAMP型が含まれるテーブルの列名の取得

    Oracle 11gを使用しているSQL初心者です。 テーブルの列名を取得する方法についての質問です。 テーブルの列名を取得するときは以下のSQLで取れると思っています。 select column_name from user_tab_columns where table_name = 'テーブル名'; --実行結果-- COLUMN_NAME ------------------------------ NAME1 NAME2 しかし、テーブルにTIMESTAMP型が含まれていると 「レコードが選択されませんでした。」 と表示されます。 TIMESTAMP型が含まれるテーブルは上記のSQLでは取得できないのでしょうか。 TIMESTAMP型が含まれるテーブルの列名の取得方法をご存知の方がいらっしゃいましたら、 ご教示ください。よろしくお願い致します。

  • Mysql関数でデータ更新に関する基本的な質問

    ■使用環境 FreeBSD 6.2 Mysql4.0.27 PHP5.2.3 Mysql関数 PHP5でMysqlデータベースの更新時に、現在のcolumnの内容に 新しく入ってきた数値を加算したいのですが、sum()という関数 がある事までは解ったのですが、この場合の使い方が解りません。 SQL自体、接続と検索処理しか使った事が無く、初心者と過程して、 教えていただけませんでしょうか。 ※sum()関数の使用が適切で無ければ、申し訳ありません。 ■補足 テーブル名:test カラム名 :ruikei 知りたい事。 入力フォームより送られてきた、新しい売り上げ'$uriage'を 'test'テーブル'ruikei'にPHP取得変数'$uriage'を加算する MySQL文を発行するPHPコード。

    • ベストアンサー
    • MySQL
  • データ取得に関して

    以下の3つのテーブルがあったとします。 table1 ┌────┬───────┬──┬──────┬────┐ │●案件ID│●共有ユーザID│氏名│氏名フリガナ│利用者ID│ └────┴───────┴──┴──────┴────┘ table2 ┌────┬────┬───┬─────┬────┐ │●案件ID│登録者ID│登録日│パスワード│タイトル│ └────┴────┴───┴─────┴────┘ table3 ┌────┬────────┬─────┬───────┐ │●案件ID│●共有ファイルID│ファイル名│ファイルサイズ│ └────┴────────┴─────┴───────┘ table1の利用者IDのみを指定して、 table2.タイトル table3の該当案件IDのカウント数、 table3の該当案件IDのカウント数が1の場合、ファイル名 を取得したいのですが、SQLがうまくかけません。 どなたかご教示お願い致します。 mysql5.0.41

    • ベストアンサー
    • MySQL