
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 7 2023/07/04 09:18
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
バッチファイルからのBCP起動に...
-
Oracle 8i コンマ(,)を含むデ...
-
GROUP BYでエラーが発生
-
Access2000環境に対応するMid関...
-
SQLServer・ストアドプロシージ...
-
オブジェクト名 '<table>' が無...
-
何も表示されない実行時エラー...
-
エクセルマクロで指定範囲内の...
-
ACCESS ADOでupdateが効かない
-
SQLServerが存在しないか、アク...
-
ACCESS2000ディスクまたはネッ...
-
クエリの存在チェック
-
SQL Server2008 の解析
-
@@ERRORと@@ROWCOUNT併用について
-
リストボックスで選択したレコ...
-
エクセルのグループボックス枠...
-
vbからストアドプロシージャ内...
-
ORA-1036??
-
sqlで文字列を最後に追加したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
エクセルマクロで指定範囲内の...
-
バッチファイルからのBCP起動に...
-
PostgreSqlでFunctionの作成に...
-
ACCESS ADOでupdateが効かない
-
sqlで文字列を最後に追加したい
-
Access2000環境に対応するMid関...
-
ACCESS2000ディスクまたはネッ...
-
クエリの存在チェック
-
何も表示されない実行時エラー...
-
GROUP BYでエラーが発生
-
エクセルからSQLサーバー ...
-
ACCESSで作成したアプリケーシ...
-
SQLServer・ストアドプロシージ...
-
エクセルのグループボックス枠...
-
SQLServerのエラー1069について
-
SQLserverのIF文について
-
オブジェクト名 '<table>' が無...
-
oo4oのMovePreviousnメソッドに...
おすすめ情報
回答ありがとうございます。 ご指摘された内容が原因と見られますが、下記修正でも
「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;
でも同様のエラーが出ました。
別のエディターで試してみます。