
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も見ています
-
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
ポストグレスでisnumeric関数のようなものを使いたい
PostgreSQL
-
shellからpostgresqlへの変数の引き渡しができない
PostgreSQL
-
-
4
ORA-01013のエラーについて経験のある方お願いします。
Oracle
-
5
外部キーが設定されているテーブルのupdateについて
PostgreSQL
-
6
データベースのINT型項目にNULLはNG?
MySQL
-
7
postgreSQLのint型は桁数指定ができない??
PostgreSQL
-
8
SQLでUPSERTを一度に複数行やる方法
PostgreSQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
postgreSQLのエラーについて
-
ACCESS ADOでupdateが効かない
-
TRANSACT-SQLでのシステムエラ...
-
VB6より長文INSERT文でORA1756...
-
お世話になります。
-
VB5 + SQLServer2005 で長時間...
-
PostgreSqlでFunctionの作成に...
-
SQLServer2005(SQLEXPRESS)
-
Access2000環境に対応するMid関...
-
@@ERRORと@@ROWCOUNT併用について
-
phpMyAdminでインポートできない
-
全ストアドを対象に文字列を置...
-
DB2でselectは出来るが、update...
-
Access Excelへ出力時にエラー
-
ACCESS2000ディスクまたはネッ...
-
SQLServer・ストアドプロシージ...
-
ノートンの解約(「ライセンス...
-
Excel-VBAの「しばらくお待ちく...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
PostgreSqlでFunctionの作成に...
-
バッチファイルからのBCP起動に...
-
ACCESS ADOでupdateが効かない
-
ACCESS2000ディスクまたはネッ...
-
GROUP BYでエラーが発生
-
エクセルマクロで指定範囲内の...
-
何も表示されない実行時エラー...
-
エクセルのグループボックス枠...
-
sqlで文字列を最後に追加したい
-
エクセルからSQLサーバー ...
-
ACCESSで作成したアプリケーシ...
-
クエリの存在チェック
-
Access2000環境に対応するMid関...
-
複数の表の外部結合について
-
SQLServerが存在しないか、アク...
-
自作関数を含んだクエリをエク...
-
SQLServer・ストアドプロシージ...
-
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;
でも同様のエラーが出ました。
別のエディターで試してみます。