我试图插入以下查询,我得到语法错误。你可以帮我解决下面的问题:
INSERT INTO ABCTABLE (COLUMN1) values ('DECODE(MDSE_CD,NULL,'0000000000000000',LPAD(TO_NUMBER(MDSE_CD,'16',' '))');
答案 0 :(得分: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'','' ''))')
答案 1 :(得分:1)
尝试正确转义内部单引号
INSERT INTO ABCTABLE (COLUMN1)
VALUES ('**DECODE**(MDSE_CD,NULL,''0000000000000000'',**LPAD**(TO_NUMBER(MDSE_CD,''16'','' ''))');
答案 2 :(得分:1)
问题在于使用引号。如果我们试图分解您的查询,它将如下所示:
INSERT INTO ABCTABLE
(COLUMN1)
values
(
'DECODE(MDSE_CD,NULL,'
0000000000000000
',LPAD(TO_NUMBER(MDSE_CD,'
16
','
'))'
);
......这显然毫无意义。
您可能想要考虑如何在字符串中转义引号。
答案 3 :(得分:1)
Sql Server:
Sql Server中的DECOD功能可以替换为CASE构造
Sql Server中的LPAD函数没有直接的对应关系,但你可以使用字符串管理函数REPLACE填充你的字符串(复制一个字符多次指定的时间)
我的Sql:
MySql中的DECOD函数可以替换为CASE构造
MySql中的LPAD函数已存在
答案 4 :(得分:0)
您想要存储什么...字符串文字'DECODE(MDSE...))'
,或者您想调用函数来获取值?
要存储包含单引号的字符串文字,您需要使用额外的单引号“转义”字符串中的每个单引号,例如
O'Hare Int'l ==> 'O''Hare Int''l'
DECODE
函数是Oracle特有的。需要使用MySQL和SQL Server中的不同函数重写该表达式。