-2

次のクエリを挿入しようとすると、構文エラーが発生します。以下のクエリについて教えてください。

INSERT INTO ABCTABLE (COLUMN1) values ('DECODE(MDSE_CD,NULL,'0000000000000000',LPAD(TO_NUMBER(MDSE_CD,'16',' '))');
4

5 に答える 5

2

「このクエリは機能しません。修正してください」以外に何も言わなかったので、あなたが望むものを暗闇で刺す必要があります。あなたが持っているクエリから、列の値をDECODE(MDSE_CD,NULL,'0000000000000000',LPAD(TO_NUMBER(MDSE_CD,'16',' '))

その場合、文字列リテラル内の一重引用符をエスケープする必要があります。これを行うには、引用符を 2 倍にします。

INSERT INTO ABCTABLE (COLUMN1) 
VALUES ('DECODE(MDSE_CD,NULL,''0000000000000000'',LPAD(TO_NUMBER(MDSE_CD,''16'','' ''))')
于 2013-08-22T16:04:04.747 に答える
1

SQLサーバー:

Sql Server の DECOD 関数は CASE コンストラクトに置き換えることができます

Sql Server の LPAD 関数には直接的な対応はありませんが、文字列管理関数 REPLACE を使用して文字列を埋め込むことができます (指定された回数だけ文字を複製します)。

私のSQL:

MySql の DECOD 関数は CASE コンストラクトに置き換えることができます

MySql の LPAD 関数は存在します

于 2013-08-22T16:05:20.287 に答える
1

内側の一重引用符を適切にエスケープしてみてください

INSERT INTO ABCTABLE (COLUMN1) 
VALUES ('**DECODE**(MDSE_CD,NULL,''0000000000000000'',**LPAD**(TO_NUMBER(MDSE_CD,''16'','' ''))');
于 2013-08-22T16:04:28.860 に答える
0

何を保存しますか...文字列リテラル'DECODE(MDSE...))'ですか、それとも関数を呼び出して値を取得したかったですか?

一重引用符を含む文字列リテラルを格納するには、文字列内の各一重引用符を追加の一重引用符で「エスケープ」する必要があります。

O'Hare Int'l   ==>  'O''Hare Int''l' 

DECODE関数は Oracle 固有です。その式は、MySQL と SQL Server の両方で異なる関数を使用して書き直す必要があります。

于 2013-08-22T16:12:34.490 に答える