-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',' '))

在这种情况下,您必须转义字符串文字中的单引号。通过加倍引号来做到这一点:

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

尝试正确转义内部单引号

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

问题是引号的使用。如果我们试图分解您的查询,它将如下所示:

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

...这显然没有意义。

您可能想考虑如何在字符串中转义引号。

于 2013-08-22T16:05:19.940 回答
1

Sql 服务器:

Sql Server 中的 DECOD 函数可以替换为 CASE 构造

Sql Server 中的 LPAD 函数没有直接对应关系,但您可以使用字符串管理函数 REPLACE 填充字符串(将字符复制指定次数)

我的 SQL:

MySql 中的 DECOD 函数可以替换为 CASE 构造

MySql 中的 LPAD 函数是存在的

于 2013-08-22T16:05:20.287 回答
0

你想存储什么......一个字符串文字'DECODE(MDSE...))',或者你想调用一个函数来派生一个值?

要存储包含单引号的字符串文字,您需要使用额外的单引号“转义”字符串中的每个单引号,例如

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

DECODE功能是 Oracle 特定的。该表达式需要使用 MySQL 和 SQL Server 中的不同函数重写。

于 2013-08-22T16:12:34.490 回答