SQL中的DECODE函数

时间:2013-08-22 15:59:46

标签: mysql sql sql-server

我试图插入以下查询,我得到语法错误。你可以帮我解决下面的问题:

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

5 个答案:

答案 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中的不同函数重写该表达式。