我正在尝试在Progress SQL中做这样的事情(这不是POSTGRES!)
SELECT
CASE WHEN code LIKE '%foo%' THEN 'Y' ELSE 'N' END as foo
FROM
bar
但是Progress不支持LIKE运算符。 INSTR
看起来可能会完成这项工作,但它是一个Progress扩展,我正在使用的数据库不支持。是否有另一种使用标准ODBC函数实现此目的的方法?
由于
答案 0 :(得分:5)
Progress 4GL中没有LIKE
运算符。 (有LIKE
个关键字,但它用于不同的内容。)相反,您需要使用MATCHES
或CONTAINS
个运算符。我从来没有使用过SQL接口来进行改进,但它可能是相同的。
所以你可以试试:
SELECT
CASE WHEN code MATCHES '*foo*' THEN 'Y' ELSE 'N' END as foo
FROM
bar
注意 - MATCHES
使用*
代替通配符代替%
。
或者:
SELECT
CASE WHEN code CONTAINS 'foo' THEN 'Y' ELSE 'N' END as foo
FROM
bar
答案 1 :(得分:1)
刚刚发现这个问题,对于任何可能仍有问题的人我建议使用SquirrelSQL Client,它允许你向Progress基础编写几乎100%的SQL语法。像包括
答案 2 :(得分:0)
您可以尝试使用MATCHES(与LIKE语法相同),也许这样可行。
答案 3 :(得分:0)
您使用的是什么版本的Progress? 10.1? 10.2?
您是在4GL会话中使用嵌入式SQL-89还是通过ODBC / JDBC连接使用SQL-92?听起来你使用的是SQL-92,因为你引用了“drivers”和INSTR。
无论如何,SQL都没有LIKE。有INSTR和LOCATE可能会做你想要的。
MATCHES仅作为4GL关键字提供。要在SQL中使用它,您需要使用嵌入式SQL-89,但正确思想中没有人会在4GL会话中编写SQL代码。它只是作为营销复选框,它是一种完全站不住脚的4GL代码。