SQLについて質問です。


項目に入っているデータを20文字で区切って保存したいと考えています。

★テーブル名 TEST

★項目名 KOUMOKU1 , KOUMOKU2 , KOUMOKU3

例えば

KOUMOKU1にデータが入っていて

このデータをSQL処理

20文字以内の場合はそのままKOUMOKU2に文字が入ります。

しかし

20文字を超える場合

最初の20文字を KOUMOKU2 に入れて 残りの文字を KOUMOKU3 

に入れます。

上記のようなSQL命令を行いたいのですが実行可能でしょうか?

お手数をおかけしますがよろしくお願いいたします。

※データベースはPhpMyAdminを使用しています。 


回答の条件
  • 1人2回まで
  • 登録:2009/09/04 16:31:09
  • 終了:2009/09/04 23:14:49

ベストアンサー

id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012009/09/04 18:38:56

ポイント100pt

CASE 式は覚えておいて損の無いものなので、

横から出ても良いものかと、躊躇しましたが、

今件の場合は、もっともっとシンプルに出来ますので、横槍失礼します。

UPDATE TEST
SET KOUMOKU2 = LEFT(KOUMOKU1, 20), KOUMOKU3 = SUBSTR(KOUMOKU1, 21)

文字列を扱う関数はいろいろあって、下記に載ってますので、

ざぁっとで結構ですから、眺めてみてください。

MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.3.2 文字列関数

(そちらの現在のMySQLのバージョンが分からなくなってしまったので、

 少し古めのページにリンクしてあります。)

id:aiomock

ご回答ありがとうございます。

2009/09/04 21:55:21

その他の回答(1件)

id:code_tk No.1

code_tk回答回数77ベストアンサー獲得回数112009/09/04 17:01:03

ポイント35pt

とりあえずphpMyAdminってデータベースはないですよって突っ込みは別にしておいて

case / length / substring関数を使用すれば可能です

他にもやり方がありますしとりあえず書いてみただけですが一応

select

KOUMOKU1,

case

when length(KOUMOKU1) <= 20 then KOUMOKU1

else substring(KOUMOKU1,1,20)

end KOUMOKU2,

case

when length(KOUMOKU1) > 20 then substring(KOUMOKU1,21)

end KOUMOKU3

from

TEST

実行はしてませんのであしからず

id:aiomock

ご回答ありがとうございます。

2009/09/04 17:20:34
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012009/09/04 18:38:56ここでベストアンサー

ポイント100pt

CASE 式は覚えておいて損の無いものなので、

横から出ても良いものかと、躊躇しましたが、

今件の場合は、もっともっとシンプルに出来ますので、横槍失礼します。

UPDATE TEST
SET KOUMOKU2 = LEFT(KOUMOKU1, 20), KOUMOKU3 = SUBSTR(KOUMOKU1, 21)

文字列を扱う関数はいろいろあって、下記に載ってますので、

ざぁっとで結構ですから、眺めてみてください。

MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.3.2 文字列関数

(そちらの現在のMySQLのバージョンが分からなくなってしまったので、

 少し古めのページにリンクしてあります。)

id:aiomock

ご回答ありがとうございます。

2009/09/04 21:55:21
  • id:kn1967
    SUBSTR → SUBSTRING
  • id:aiomock
    code_tk さん

    phpMyAdmin はデータベースではないとは どういうことでしょうか?

    IT業界でいうデータベースとは何を指すのでしょうか?

    データを構築出来るものを自分はデータベースだと思っていたので、phpmyadmin はデータベースだと思っていました。

    これよりもすごいデータベースがあるのでしょうか?
  • id:kn1967
    【1】DB : DataBase
     データそのもの。
      時にはシステム全体(【1】+【2】)を差す場合もある。

    【2】DBMS : DataBase Management System
     データベースを管理するためのシステム。MySQL はその一種。
      他に有名なものとしては ORACLE、SQLServer、PostgreSQLなどがあり、
      パソコン用としては MicrosoftAccess などがある。

      「データベースのバージョンは何?」などと聞かれたりした場合は、
      「データベースマネージメントシステムはどれの、どのバージョン?」
      というのを略しているので「MySQL 5.1 だよ」といった具合に答えます。
      ( 5.1というのは適当に書いているだけなので、今後のため、
    select version();
    でバージョン表示するなどして、レンタルサーバ/ご自宅環境両方ともに
       再確認しておいてください。)

    【3】ユーザーインターフェース
      phpMyAdmin は MySQL をブラウザから操作するためのもの。
      これを使っているという事からDBMSがMySQLであるという事までは判る。
      ただし、MySQLのバージョンまでは推理しようがない。

      phpで作るアプリケーションもこれに属する。

    【4】SQL
     データベースに問い合わせたり、操作したりするための言語。
     基本的構造はDBMSが違っても同じだけど MySQL ver4 と 5 でも、
      使える関数に違いがあったりするので、質問の際にはDBMS名と
      とバージョンを書くことが必須だったりします。


    phpMyAdmin はデータベースを差すものではないという件は、
    私自身も、過去に書いたような気がしていたので、
    何度も書かないほうがいいかなって・・・っで、最近はスルーしてきたのですが、
    それがアダとなったようで、スミマセン。
  • id:aiomock
    kn1967 さん

    ご回答ありがとうございます。

    データベースというものが何かというのが理解できました。

    phpmyadmin は ユーザーインターフェースというものなのですね。

    select version(); を教えていただいたおかげですぐにバージョンを把握することが出来ました。

    とても勉強になりました。

    ありがとうございます。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません