PostgreSql(Ver.11)で24時以降の時間を25時などに変換するFunctionを作成したいのですが
入力時間、出力時間共、文字列で入力して文字列に変換して出力したいのですが、下記functionを
作成しようとすると「SQL : "00"またはその近辺で構文エラー」となります。
Function内で文字列をシングルコーテーションで囲むとエラーになるのですか?
CREATE OR REPLACE FUNCTION FromTime(INTIME character varying(5)) RETURNS character varying(5) AS '
DECLARE
OUT_TIME character varying(5);
BEGIN
IF INTIME = '00:00' --ここでエラーになります(原因は、シングルコーテーションで囲んだから?)
THEN OUT_TIME := '24:00'
END IF;
RETURN OUT_TIME;
END;
No.3ベストアンサー
- 回答日時:
それも使ってます。
なんでそんなエラーになったか、理由わかりました。
> ";"(セミコロン)または"/"(スラッシュ)のみの行、または "GO" のみの行で区切ったSQLの連続実行
> キャレット位置のみ、キャレット位置以降、全体を指定してSQLの連続実行が出来ます。
> また、セミコロンを無視しての全体実行も出来ます。
https://a5m2.mmatsubara.com/help/SQLEditor/runSq …
この機能のせいで、セミコロンでSQLが分割されて実行されています。
全体実行にすれば実行できます
No.2
- 回答日時:
補足について。
それをコピーして、pgAdminのクエリツールから実行してみましたが、そのエラーは出ませんでした。
# 代入文に間違いはありましたが
# https://www.postgresql.jp/document/11/html/plpgs …
実行方法に何か問題があるのではないでしょうか
No.1
- 回答日時:
> AS 'definition'
とあるように、 as の後には、定義したい内容を書いた文字列が決ます
CREATE OR REPLACE FUNCTION FromTime(INTIME character varying(5)) RETURNS character varying(5) AS '
の最後についている ' は飾りではありません。文字列の始まりです。
ここから対になる ' までが文字列です。ということは
IF INTIME = '
までがas に指定する文字列で
00:00
から先は、文字列の外になるので、最初に書いたマニュアルの文法に従って解釈されます。
そして、こんな書き方は無いので「構文エラー」になります。
https://www.postgresql.jp/document/11/html/sql-s …
全体を文字列にしたいのなら、上記を参考に ' を「文字列の終り」ではなく「シングルクオーテーション」として扱うように記述します。
CREATE FUNCTIONのサンプルにもあるように、$ を使うのが常套手段です。
> 4.1.2.4. ドル記号で引用符付けされた文字列定数
ご教授して頂いた通り
「A5:SQL Mk-2」で、「スラッシュ("/")のみで行を区切る」に
変更し、「SQLの実行Control+Enter(F5)」でFunctionが作成されました。
何度も時間を取って頂き有難うございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
推しミネラルウォーターはありますか?
推しミネラルウォーターがあったら教えてください
-
フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
あなたが普段思っている「これまだ誰も言ってなかったけど共感されるだろうな」というあるあるを教えてください
-
映画のエンドロール観る派?観ない派?
映画が終わった後、すぐに席を立って帰る方もちらほら見かけます。皆さんはエンドロールの最後まで観ていきますか?
-
海外旅行から帰ってきたら、まず何を食べる?
帰国して1番食べたくなるもの、食べたくなるだろうなと思うもの、皆さんはありますか?
-
天使と悪魔選手権
悪魔がこんなささやきをしていたら、天使のあなたはなんと言って止めますか?
-
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
postgresql についてです
PostgreSQL
-
timestampのデータはどのようにして入力
PostgreSQL
-
-
4
「マスタ」と「テーブル」の違いとはなんでしょうか?
Oracle
-
5
postgreSQLのint型は桁数指定ができない??
PostgreSQL
-
6
列が存在しないと言われる
PostgreSQL
-
7
Windows版 pg_dumpの結果をログ取得
PostgreSQL
-
8
Javaで年月の取得(YYYYMM形式で)
Java
-
9
日本語のエイリアスは "で囲う必要があるのでしょうか"
MySQL
-
10
select句副問い合わせ 値の個数が多すぎます
Oracle
-
11
windows版postgresql 異なるバージョンの共存について
PostgreSQL
-
12
データベース関係で、データの洗い替えとはどのような事を行うことでしょう
IT・エンジニアリング
-
13
シェルスクリプトでエラーが出ます
UNIX・Linux
-
14
バッチファイルで変数の中身をファイル出力したい
UNIX・Linux
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracle 8i コンマ(,)を含むデ...
-
レポートが開けない。
-
SQLのエラー(~付近に不適切な...
-
ACCESS2000ディスクまたはネッ...
-
PostgreSqlでFunctionの作成に...
-
vbからストアドプロシージャ内...
-
他クライアントからの接続に関して
-
SQLserverのIF文について
-
分散トランザクションを開始で...
-
SQL ServerのSQL実行時のエラー...
-
oo4oのMovePreviousnメソッドに...
-
Access2000環境に対応するMid関...
-
バッチファイルからのBCP起動に...
-
ORA-1036??
-
Access2000でDAOを使用したとき...
-
エラー:823 重大度:24 状態...
-
自作関数を含んだクエリをエク...
-
何も表示されない実行時エラー...
-
ストアドの戻り値(配列)について
-
VB6より長文INSERT文でORA1756...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracle 8i コンマ(,)を含むデ...
-
SQLのエラー(~付近に不適切な...
-
PostgreSqlでFunctionの作成に...
-
エクセルマクロで指定範囲内の...
-
ACCESS ADOでupdateが効かない
-
ACCESSで作成したアプリケーシ...
-
バッチファイルからのBCP起動に...
-
GROUP BYでエラーが発生
-
オブジェクト名 '<table>' が無...
-
エクセルからSQLサーバー ...
-
Access2000環境に対応するMid関...
-
sqlで文字列を最後に追加したい
-
ACCESS2000ディスクまたはネッ...
-
ストアドの戻り値(配列)について
-
@@ERRORと@@ROWCOUNT併用について
-
Accessのレポートが新規作成で...
-
SQLServerのエラー1069について
-
SQLserverのIF文について
-
クエリの存在チェック
-
全ストアドを対象に文字列を置...
おすすめ情報
回答ありがとうございます。 ご指摘された内容が原因と見られますが、下記修正でも
「DECLARE OUT_TIME text"またはその近辺で文字列のドル引用符が閉じていません」のエラーが出ます。
CREATE OR REPLACE FUNCTION FromTime(INTIME character varying(5)) RETURNS text AS $$
DECLARE
OUT_TIME text;
BEGIN
IF INTIME = '00:00'
THEN OUT_TIME := '24:00'
END IF;
RETURN OUT_TIME;
END;
$$ LANGUAGE plpgsql
わざわざ確認して頂き有難うございます。
環境が悪い可能性もあります。
「A5:SQL Mk-2」エディタでFunction を作成しようとしたので
相性が悪いかもしれません。
https://www.postgresql.jp/document/9.4/html/sql- …
PostgreSQL 9.4.5文書
PL/pgSQLで、引数名を使用して、整数を1増やします。
CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $$
BEGIN
RETURN i + 1;
END;
$$ LANGUAGE plpgsql;
でも同様のエラーが出ました。
別のエディターで試してみます。