postgresql substrでエラーが発生する問題

このQ&Aのポイント
  • postgresql8.4でsubstrを使う際にエラーが発生します。詳細な解決策を教えてください。
  • substr(bag,0.2)がエラーになり、substr(integer(bag),0,2)もシンタックスエラーが発生します。
  • SQLの経験が少なく、困っています。postgresql8.4のsubstrの正しい使い方を教えてください。
回答を見る
  • ベストアンサー

postgresql substrでエラー

いつもお世話になっております。 postgresql8.4でsubstrを使うとエラーになります。 ご教授願えないでしょうか。 select type_cd, brand_cd, brand_name from bags bag inner join type t on substr(bag,0.2) = t.type_cd としています。 尚、type_cd ,brand_cd はinteger function substr(integer, integer, integer) does not exist とエラーが表記されるので、 substr(bag,0.2) → substr(integer(bag),0,2)とやると、 "(" がシンタックスエラーとなります。 なにぶんSQLの経験が少なくてこまっております。 宜しくお願いします。

  • prr4e
  • お礼率48% (66/136)

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

  • ベストアンサー
  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.4

ANo.3ですが、参考のURLを書き忘れていました。 http://www.sql-reference.com/string/substring.html

prr4e
質問者

補足

有難う御座います。 select substr($a,1,1) from sample と使用する事は可能ですが、 JOINの条件文に使うとエラーとなるようです。

その他の回答 (3)

  • samtomsan
  • ベストアンサー率55% (1060/1897)
回答No.3

substrを使用して何をしようとしているのかが分かりませんが、下記などの説明を読んで見てください。 SUBSTRの定義は SUBSTR(string, start[, length]) SUBSTR関数は string で示す文字列の start から length 文字分文字列を取得します.ここで start の先頭の位置は1から始まります.また,length は省略可能です.省略した場合は文字列の最後まで取得します. SQLサンプル SUBSTR関数を使用して文字列の一部を取得する例を以下に示します. SELECT SUBSTR('スヌーピー', 2, 2) AS 結果 結果 ヌー 従って > function substr(integer, integer, integer) does not exist 第一引数が integer の関数は無いよとエラー表示されているわけです。

prr4e
質問者

補足

ご回答有難う御座います。 開始位置は0から始まると思っていました。 有難う御座います。

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

> select > type_cd, > brand_cd, > brand_name > from bags bag > inner join type t on substr(bag,0.2) = t.type_cd そもそも何をやりたいのでしょうか?「substr(bag,0.2)」の「bag」は「bags」の項目ですか? エラーメッセージは第一引数がInteger項目に対してsubstrという関数はないというものです。 確か、PostgreSQLの部分文字列関数はsubstringだったはずでし。

prr4e
質問者

補足

ご回答有難う御座います。 ごめんなさい。 brand_cd が bagです

回答No.1

bagはテーブルbagsの別名ですので、substrの最初にテーブル名を設定する事はできません。 尚、2番目の数値は先頭位置は1ですので、0は多分正しく動かないと思います。

prr4e
質問者

補足

ご回答有難う御座います。 すみません記述ミスです。 bagはbrand_cdです。

関連するQ&A

  • Turbolinux8でPostgreSQL

    Turbo Linux 8.0 apache1.3.27-13 php 4.2.3-10 postgresql 7.2.2-4 の環境ですが、ある参考書で、 => grant all on TableA to nobody; となっていたので実行したのですが、 ERROR: user "nobody" does not exist となってしまいます。 この場合、どのように対処したらいいのでしょうか? nobodyはuseraddできるのでしょうか?

  • postgreSQLのエラー表示について

    質問させて頂きます。 初めてpostgreSQLをさわっている初心者なのですが、 今まで、あるグループウェアをりようして、サーバに WEBベースで接続し、情報を表示したり、データベースの内容を登録・削除したりしていたのですが、ある時からブラウザに エラーメッセージしか表示されなくなりました。 そのエラーメッセージは以下の通りです。 Invalid SQL: SELECT c.cab_dept_code as dept_code, c.cab_category_id as folder_code, c.cab_category_name as folder_name, f.fullpath_name as dept_fullname, dept2fulldept_pad(f.dept_code) as dept_fullcode, cab_cate_fullpath(c.cab_dept_code, c.cab_category_id) as folder_fullcode, c2.take_cat_id FROM dept_fullpath f LEFT OUTER JOIN cab_category c ON (c.cab_dept_code = f.dept_code) LEFT OUTER JOIN (SELECT t.cab_dept_code, take_cat_id(t.cab_dept_code,'hashi') AS take_cat_id FROM (SELECT DISTINCT cab_dept_code FROM cab_category) t ) c2 ON (c.cab_dept_code = c2.cab_dept_code) ORDER BY dept_fullcode, folder_fullcode PostgreSQL Error: 1 (ERROR: function cab_cate_fullpath(bigint, bigint) does not exist HINT: No function matches the given name and argument types. You may need to add explicit type casts.) Session halted. 長々と書いてすいません。重要な部分が分からないので一応全文のせました。 このエラーメッセージはどういう意味なのでしょうか? 自分なりに調べてみたのですが、いまいちよく分かりません。 また、エラーの解決方法などが分かる方がいらっしゃれば教えて頂けないでしょうか? よろしくお願いします。

  • PostgreSQLで表結合+DELETEしたい

    PostgreSQLで、テーブル(2)の情報をキーに(1)を削除したいのですが、エラーが出てしまいます。 どなたか解決策をご存知の方いらっしゃいましたら ご教授宜しくお願い致します。 _構造_____________________ テーブル(1)・・カラムA テーブル(2)・・カラムA、カラムB _SQL文_____________________ DELETE FROM (1) INNER JOIN (2) ON (1).カラムA= (2).カラムA WHERE (2).カラムB=X _エラーメッセージ__________ [Err] ERROR: syntax error at or near "INNER"

  • SQL文のエラー

    PostgreSQLの初心者です。よろしくお願いします。 今、日本語ODBCドライバを使ってクライアント側を VB.NETでプログラムを作っています。PostgreSQLは8.1.4です。 レコードの追加をするために、レコードIDのMAX値を 撮るためにプログラム中にSQL sql = "SELECT MAX(user_id) AS MaxID FROM user" を入れて発行したところ、本来ですと「1」が返って こなければいけないのに、 Msgbox(MaxID) を仕込むと「0」が返ってきます。そして、その後に ERROR [HY000] Error while executing the query; ERROR; operator does not exist: # integer というエラーが返ってきます。 先ほどのSQLはリモートで直接PostgreSQLにつなぐと ちゃんと「1」が返ってくるのですが、VB.NET上では うまくいきません。 質問としては2つあります。 1)VB.NET上で実行すると、なぜ「0」が返ってきて しまうのか? 2)エラーメッセージの意味 の2点です。 よろしくお願いします。

  • 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 何が悪いのでしょうか。

  • PostgreSQL 8.0.2 の ERROR: relation does not exist.

    エラーの詳細は以下のとおりです。 まず、ダウンロード後解凍したpostgresql-8.0-ja.msiを ダブルクリックして、Windows2000serverSP4 に postgreSQL8.02 をインストールしました。 このときユーザpostgreも新規作成しました。 つぎに、ツールpgAdmin3を使用して上記postgreユーザで データベースtemplate1のpublicスキームの中に、 ID(int4), Book(text)の2フィールド、IDフィールドをキーとして、 tblBooksという名称の練習用の簡単なテーブルを作成しました。 さらに、pgAdmin3を使用して、このtblBooksテーブルに適当なレコードも4件追加でき、 pgAdmin3のテーブルビューで追加したこのレコード4件を確認できました。 また、pgAdmin3のクエリツールを用いて、クエリの下記を実行すると 正常に実行してくれます。 select version(); "PostgreSQL 8.0.2 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special)" ところが、上で作成したtblBooksテーブルを含めたクエリを実行させると、 何回やっても次のようなエラーとなります。 select * from tblBooks; ERROR: relation "tblbooks" does not exist.------(1) pgAdmin3でなく、ツールpgSQLを使っても同じエラー(1)がでます。 この"relation does not exist"とは一体どんなエラーなんでしょうか? 環境は, Windows 2000 Server SP4 で、 template1,tblBooksは次のようになっています。 CREATE DATABASE template1 WITH OWNER = postgres ENCODING = 'EUC_JP' TABLESPACE = pg_default; GRANT ALL ON DATABASE template1 TO postgres; CREATE TABLE "tblBooks" ( "ID" int4 NOT NULL, "Book" text, CONSTRAINT "key" PRIMARY KEY ("ID") ) WITHOUT OIDS;

  • SQLのエラーについて

    SQLの初心者です。 アクセス2000で下記のSQLを実行するとエラーになります。 SQLの書き方に問題が有るのでしょうか? どなたか教えて頂けたら幸いです。 宜しくお願いします。 エラーの内容 SQL実行中に以下のエラーが発生しました。 エラーコード:-3100 [Microsoft][ODBC Microsoft Access Driver] クエリ式 'U.商品CD=商品マスタ.商品CD INNER JOIN 部署マスタ ON U.部署CD=部署マスタ.部署CD' の 構文エラー : 演算子がありません。 SQLステータス:37000 SQLの内容 SELECT U.商品CD,商品マスタ.商品名,U.受払年月日,U.部署CD,部署マスタ.部署名, U.SUM受払数 AS 受払数 FROM [SELECT 商品CD,受払年月日,部署CD,SUM(受払数) as SUM受払数 FROM 受払TBL WHERE 受払年月日 = 20110513 GROUP BY 商品CD,部署CD,受払年月日,受払数] AS U INNER JOIN 商品マスタ ON U.商品CD=商品マスタ.商品CD INNER JOIN 部署マスタ ON U.部署CD=部署マスタ.部署CD ORDER BY 商品CD,部署CD,受払年月日,受払数

  • 「column "A" does not exist」というエラーが出て、ビューを作成することができません。

    「column "A" does not exist」というエラーが出て、ビューを作成することができません。 postgreSQL(8.2)&pgAdmin(1.6.3)で以下のようなビューを作成しようとしたところ、「column "A" does not exist」というエラーが出てしまい、作成することができません。 試しにMS ACCESSで全く同じSQL文を発行してみたのですが、ちゃんとクエリが作成でき、以下の図のように問い合わせ結果を閲覧することもできました。PostgreSQLでも作成できる方法があればご教示いただけないでしょうか。 CREATE VIEW v_test AS SELECT 1 AS A, A + 3 AS B; +----+ | A | B | +----+ | 1 | 4 | +----+ 上図のように1という数値を格納する列「A」と、その列の値に3を足した数値を格納する列「B」で構成されるビューを作成できればいいのですが、どうしてもできません(実際はもっと複雑な内容なのですが、要は、直前に定義した列(A)の値を参照する列(B)を作成することができないのです)。 そもそもPostgreSQLではできないものなのでしょうか。それとも初歩的な何かが抜けているのでしょうか。 該当するような参考文献が見つからないため質問させていただきました。 どうかご教示いただけないでしょうか。

  • 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文のエラーについて

    下記のSQL文な実行するとエラーになってしまいます。 数時間考えましたが、上手く行きません。 どなたか教えて頂けないでしょう? 宜しくお願いします。 DB:アクセス97 アクセス2000 SQL実行中に以下のエラーが発生しました。 エラーコード:-3010 [Microsoft][ODBC Microsoft Access Driver] パラメータが少なすぎます。1 を指定してください。 SQLステータス:07001 SELECT mid(U.受払年月日,1,6), U.部門CD, 部門マスタ.部門名, U.商品CD, 商品マスタ.商品名, U.科目CD, 科目マスタ.科目名, U.SUM受払数 FROM (部門マスタ INNER JOIN ((SELECT mid(受払年月日,1,6),部門CD,商品CD,科目CD,SUM(受払数) as SUM受払数 FROM 受払TBL WHERE 受払年月日 BETWEEN '201101' and '201105' GROUP BY mid(受払年月日,1,6),部門CD,商品CD,科目CD) AS U INNER JOIN 商品マスタ ON U.商品CD = 商品マスタ.商品CD) ON 部門マスタ.部門CD = U.部門CD ) INNER JOIN 科目マスタ ON U.科目CD = 科目マスタ.科目CD ORDER BY U.受払年月日, U.部門CD, U.商品CD, U.科目CD