Java 获取函数case和VARCHAR上的MySQL语法错误

Java 获取函数case和VARCHAR上的MySQL语法错误,java,mysql,jboss,db2,Java,Mysql,Jboss,Db2,当我尝试运行一个简单的MySQL函数create queries时,我遇到了一些SQL语法错误。这些都在Db2上工作。我想在MySQL上运行它 CREATE FUNCTION SAMPLE1 ( I INTEGER ) RETURNS VARCHAR(4) BEGIN CASE WHEN I < 256 THEN RETURN CAST(SUBSTR(HEX(I), 1, 2) AS VARCHAR(4)); WHEN I > 25

当我尝试运行一个简单的MySQL函数create queries时,我遇到了一些SQL语法错误。这些都在Db2上工作。我想在MySQL上运行它

CREATE FUNCTION SAMPLE1
  (
    I INTEGER
  ) RETURNS VARCHAR(4)
  BEGIN
    CASE
      WHEN I < 256 THEN RETURN CAST(SUBSTR(HEX(I), 1, 2) AS VARCHAR(4));
      WHEN I > 255 AND I < 4096 THEN RETURN CAST((SUBSTR(HEX(BITAND((I / 256), 255)), 2, 1) || SUBSTR(HEX(BITAND(I, 255)), 1, 2)) AS VARCHAR(4));
      ELSE
        RETURN CAST((SUBSTR(HEX(BITAND((I / 256), 255)), 1, 2) || SUBSTR(HEX(BITAND(I, 255)), 1, 2)) AS VARCHAR(4));
    END CASE;
  END;
和得到错误

you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR(3)) || '.' ||
                      CAST (BITAND(((IP4 + 2147483648) / 65536), 255) AS ' at line 14
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTERVAL BIGINT
  ) RETURNS INTEGER
  DETERMINISTIC
  NO EXTERNAL ACTION
  CONTA' at line 9
最后一个查询是什么

CREATE FUNCTION SAMPLE3
  (
    CONNECTED TIMESTAMP,
    DISCONNECTED TIMESTAMP,
    INTERVAL BIGINT
  ) RETURNS INTEGER
  DETERMINISTIC
  NO EXTERNAL ACTION
  CONTAINS SQL
  CALLED ON NULL INPUT
  BEGIN ATOMIC
    IF (CONNECTED IS NULL) THEN
        RETURN -1;
    ELSEIF (DISCONNECTED IS NULL) THEN
        RETURN CASE WHEN (INTERVAL = 0 OR CONNECTED + INTERVAL MINUTES > CURRENT TIMESTAMP) THEN 1 ELSE 0 END;
    ELSE
        RETURN CASE WHEN (INTERVAL = 0 OR CONNECTED + INTERVAL MINUTES > CURRENT TIMESTAMP) AND CONNECTED > DISCONNECTED THEN 1 ELSE 0 END;
    END IF;
  END;
获取错误

you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'VARCHAR(3)) || '.' ||
                      CAST (BITAND(((IP4 + 2147483648) / 65536), 255) AS ' at line 14
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INTERVAL BIGINT
  ) RETURNS INTEGER
  DETERMINISTIC
  NO EXTERNAL ACTION
  CONTA' at line 9
  • VARCHAR
    是否未在mysql
    CAST
    函数中使用
  • 间隔
    BIGINT
    在空输入上调用
    ,以及
    在mysql查询中当THEN ELSE END
    不同时的情况
    有什么建议或解决办法吗

    我想不是这样的

    当I<256时,则返回强制转换(SUBSTR(十六进制(I),1,2)作为VARCHAR(4))

    是这样的


    当I<256时,然后将CAST(SUBSTR(HEX(I),1,2)返回为VARCHAR(4)

    MySQL的CAST使用/接受的类型相当一般。尝试将所有的
    CAST(…AS VARCHAR(X))
    替换为
    CAST(…AS CHAR)
    。如果需要强制使用精确的类型,可以将CAST结果分配给声明的变量


    编辑:只是做了进一步的测试;
    CAST(…AS CHAR(X))
    也可以工作;这是CAST的VAR部分,MySQL显然不喜欢。

    那么,您是否“检查与您的MySQL服务器版本相对应的手册,以了解正确的语法”来创建函数?第三行“返回时”中的问题是什么(INTERVAL=0或CONNECTED+INTERVAL MINUTES>CURRENT TIMESTAMP)然后1 ELSE 0 END;'?当(INTERVAL=0或CONNECTED+INTERVAL MINUTES>CURRENT TIMESTAMP)然后1 ELSE 0 END;时,第三个查询行
    返回案例中的问题是什么?我在第二个查询中将VCHAR(3)编辑为CHAR(3)。因此
    强制转换(BITAND)((IP4+4294967296)/16777216),255)作为CHAR(3))| |'。| |
    和获取错误
    正确语法以使用接近“CHAR(3))| | |'。|
    我不是100%确定,但INTERVAL是一个保留字,因此使用它可能会导致奇怪的问题。