日本語文字の抽出方法について

このQ&Aのポイント
  • 日本語文字の抽出について調査しています。
  • SELECT文での文字列の抽出方法について教えてください。
  • substring関数を使用したがエラーが発生しました。解決策を教えてください。
回答を見る
  • ベストアンサー

日本語文字の抽出について

SELECT * FROM pref WHERE pref_name='東京都'; としてもレコードが返ってきません。(レコード数が0になります。) 次にsubstringを用いて SELECT * FROM pref WHERE substring(pref_name) = '東京都'; としましたが、こちらでは下記のエラーになってしまいます。 何かよい方法はありませんんでしょうか? ERROR: function pg_catalog.substring(text) does not exist HINT: No function matches the given name and argument types. You may need to add explicit type casts.

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

  • ベストアンサー
noname#227796
noname#227796
回答No.1

まず、prefテーブルには、pref_nameに「東京都」というデータが入っているんですよね?間違いなく? 入っていないなら、レコード数"0"は正しいです。 もし、「東京都 」などと、「東京都」以外に余分な文字がある場合には、引っかかりませんので、likeを使うと良いでしょう。 SELECT * FROM pref WHERE pref_name like '東京都'; ※もしくは、like '%東京都%'かな。 これで引っかかったならば、「東京都」に余分なゴミがくっついて格納されていると言うことです。 引っかからなければ、そもそもデータがないのはないでしょうか? 他の可能性もないではないですが。。。

aiurai54
質問者

お礼

ありがとうございます。うまくいきました。

関連するQ&A

  • Postgreの日付関数に関して教えてください。

    Postgreの日付関数に関して教えてください。 表9.30 日付/時刻関数の例を実行していますが、 make_ で始まる関数がすべて失敗します。 PostgreSQL 9.6.2文書 9.9. 日付/時刻関数と演算子 https://www.postgresql.jp/document/9.6/html/functions-datetime.html 表9.30 日付/時刻関数 select age(timestamp '2001-04-10', timestamp '1957-06-13') select age(timestamp '1957-06-13')  : : select make_date(2013, 7, 15) select make_interval(days => 10) select make_time(8, 15, 23.5) select make_timestamp(2013, 7, 15, 8, 15, 23.5) select make_timestamptz(2013, 7, 15, 8, 15, 23.5) make_dateの失敗のメッセージ ERROR: function make_date(integer, integer, integer) does not exist LINE 1: select make_date(2013, 7, 15) ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts. ********** エラー ********** ERROR: function make_date(integer, integer, integer) does not exist SQLステート:42883 ヒント:No function matches the given name and argument types. You might need to add explicit type casts. 文字:8 何が悪いのでしょうか。

  • phpPgAdminを使ってデータの更新

    PostgreSQLのphpPgAdminを使ってデータの更新をしようと思うのですが 特定の kaiin_no を選んで その t_tiket の値を '取扱っている' に更新したいのですが 文法エラーが出ます。 文: update "store_table" set "t_tiket" = '取扱っている' where "kaiin_no" = ('100','101','103'); SQL エラー: ERROR: operator does not exist: character = record LINE 1: ...t_tiket" = '取扱っている' where "kaiin_no" = ('100... ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. phpPgAdmin では、= や ( ) 、" の使い方に特徴があるようなのです。 WHERE kaiin_no IN ('100','101','103'); とすべきなのでしょうか? ご存知の方がいらっしゃればご教示くださいませ。

  • SQL文で質問があります。

    商品マスタがあり、データは下記の感じで登録されています。  コード | 商品名  | 商品カナ | 分類コード ・・・ ---------------------------------------------------------  0001  | マウス  | マウス  | 01     ・・・  0002  | キーボード| キーボード| 01     ・・・  0003  | モニター | モニター | 01     ・・・          ・          ・          ・ SQL文で質問があります。 下記のSQLでは取得できるんですが・・・ SELECT * FROM M_SHOHIN WHERE code = ANY('{0001,0002,0003}'); 下記のSQLを実行したらエラーが出力されました。 SELECT * FROM M_SHOHIN WHERE code = ANY(  SELECT ARRAY_AGG(code) AS code FROM M_SHOHIN WHERE class_code = '01' ); ERROR: operator does not exist: character varying = character varying[] HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. なので下記のようにCASTをするようにして実行したらエラーは出力されなくなりましたがデータの取得ができませんでした。 SELECT * FROM M_SHOHIN WHERE code = ANY(  SELECT CAST(ARRAY_AGG(code) AS VARCHAR) AS code  FROM M_SHOHIN WHERE class_code = '01' ); どのようにすれば取得できますでしょうか。 説明が下手で申し訳ありませんがアドバイスいただけませんでしょうか。 データベースはPostgreSQL 8.4.9です。 宜しくお願いします。

  • SUBSTRING文が日本語認識しない

    MySQL初心者です。環境はOS:Linux、MySQLのバージョンは5.0.45 テーブル :friends フィールド:no,name,birth,emailがあるとして nameの中に、あゆみ、直美、純子、秀美など登録されているとします。 ここで、名前「name」の2桁目「美」という文字のデータを表示させてたくて mysql> SELECT * FROM friends WHERE SUBSTRING(name,2,1)='美'; と入力したのですが、Empty set (0.00 sec) と返ってきてしまいます。 例えば、 mysql> SELECT * FROM friends WHERE SUBSTRING(email,2,1)='o'; のように、半角文字だったら正しく返します。 どなたかアドバイスお願いします。

  • 年齢計算

    以下のフィールド構成のテーブルがあるのですが 「birthday」フィールドの値を元に、現時点の年齢を計算して 「nenrei」フィールドに入れたいと考えています。 【player_tbl】 id     ID name   名前 birthday 誕生日(19950203のような形式でデータが入っています) nenrei  計算された年齢を入れる 以下のSQLを実行してもエラーになります。 update player_tbl set nenrei = extract(year from age(current_date, birthday)) ; SQL エラー: ERROR: function age(date, character varying) does not exist HINT: No function matches the given name and argument types. You may need to add explicit type casts. birthdayのところを工夫しないとダメだということは、なんとなくわかるのですが どのように変更すると実現できるのかわかりません。 age関数の中に、フィールド名を入れたい場合は、どのような記述になるのでしょうか? また、データ数は10万件くらいですが、一気に更新するのは難しいでしょうか? DBはPostgreSQLです。 よろしくお願いいたします。

  • SQL LIKE演算子 抽出できない

    VB6でAccess2003のテーブルから情報を抽出したいと思っています。 「東京都千代田区」、「東京都新宿区」と入力するとそれらに該当 するレコードが全て抽出されてきます。しかし「東京都」だけ入力して 「東京都」から始まるレコードを全て抽出しようと「%」を使用して書換えました所、なにも抽出できなくなりました。 Set DB = OpenDatabase("c:\SalesManager\jdb.mdb") strSQL = "SELECT * FROM t_USER " strSQL = strSQL & "WHERE KOKYAKUMEI LIKE "   strSQL = strSQL & "'" & "%" & txtUser.Text & "%" & "'" 初歩的な質問で申し訳ございませんが、ご教授頂きたく思います。 よろしくお願いします。 「%」を使用しなかった時のコード strSQL = strSQL & "'" & txtUser.Text & "'"

  • Access2007でSQLの複数列副問い合わせについて

    VB2005+Access2007を使用しております SQL文の複数列副問い合わせについて教えて下さい 検索をしても他のデータベースのものばかりヒットし、解決できません SELECT * FROM Uriage WHERE (Date, DateID) = (SELECT Date, DateID FROM Uriage WHERE NAME = 'cup') これを実行すると 「メイン クエリの FROM 句の予約語 EXISTS を使用しないフィールド を複数返すサブクエリを作成しました。サブクエリのSELECT ステート メントを変更し、1 つのフィールドだけを指定してください。」 というエラーがでてしまいます。 形をかえ、 SELECT * FROM Uriage WHERE Date = (SELECT Date FROM UriageList WHERE NAME = 'cup') AND DateID =(SELECT DateID FROM UriageList WHERE NAME = 'cup') これを実行すると、 「このサブクエリでは 1 つのレコードしか返せません。」 というエラーがでてしまいます。 また、 SELECT * FROM Uriage WHERE (Date) IN (SELECT Date FROM UriageList WHERE NAME = 'cup') AND (DateID) IN (SELECT DateID FROM UriageList WHERE NAME = 'cup') を実行したところ、 エラーはでないものの、抽出結果が異なるものが出てきてしまいました。 これを解決するにはどのようにしたらよいのでしょうか? よろしくお願いいたします。 なお、某知恵袋にも同様の質問をしてしまいましたが、 回答者様への回答や追加質問が出来ず、 こちらに再質問させて頂きました。申し訳ございません。

  • 一つのテキストフィールドで抽出データを変えたい

    いつもお世話になっております。 早速ですが、一つのテキストフィールドで2種類の抽出条件を検索したいのです。 sql="select * from A where (code>='" & str &"' or name>='" & str &"')" のようにSQLへ問い合わせしております。 ユーザーが検索するときにcodeで検索かけるかmameで検索かけるか分からないので、どちらが入力されても検索できるようにしたいのです。 ちょっと変わったことをしていまして、codeが「0123」以上のものまたはnameが「あああ」以上のものを検索したいです。 sql="select * from A where (code='" & str &"' or name='" & str &"')" のように一意のものを検索することは出来ております。 また、それぞれ sql="select * from A where (code>='" & str &"')" sql="select * from A where (name>='" & str &"')" ではどちらも検索出来ております。 これを上記のようにORでくっつけるとnameのほうだけ検索可になりました。 設定方法が間違えていますでしょうか? わかる方がいましたら、ご協力お願いします。

  • 【PHP】複数語検索について

    お世話になります。 PHPにて複数語検索を行いたいのですが、うまく検索できずに困っています。 テーブル名はinformation、 レコード名はnameとして、スペース区切りで検索します。 $st = $db->prepare("SELECT * FROM information"); $where = array(); if($arr['name']){ $name_ary = explode(" ", $name); $name_count = count($name_ary); $where = ""; for( $i = 0; $i < $name_count; $i++ ){ if( $i != 0 ){ $where = ($where . " or"); } $where = $where . " name LIKE '%{$name_ary[$i]}%'"; } } $query= sprintf("SELECT * FROM information WHERE $where"); $st = $db->prepare($query); どなたかご教授いただけないでしょうか? 他の質問など見て真似たり、下記サイトを参考にしたりしているのですが、 うまくいかず困っております。 http://blog.olivesystem.com/824.html 何卒宜しくお願い致します。

    • 締切済み
    • PHP
  • AccessのクエリでvbLfのみ抽出するには

    Access2010のクエリー(SQL)で vbLfかvbCrLfが含まれているレコードを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(10) & "*"; vbLfが含まれているレコードは抽出せず、 vbCrLfが含まれているレコードだけを抽出するには、 SELECT [テーブル1].* FROM テーブル1 WHERE [テーブル1].フィールド1 Like "*" & Chr(13) & Chr(10) & "*"; でよいと思いますが、 vbCrLfが含まれているレコードは抽出せず、 vbLfが含まれているレコードだけを抽出するには、 どのように記述すればよいのでしょうか。 よろしくお願いします。