2015-09-06 72 views
2
SELECT * 
FROM debates 
WHERE assertion LIKE '%inspiration%' OR '%X%' 

PG::InvalidTextRepresentation: ERROR: invalid input syntax for type boolean: "%x%" LINE 1: ...FROM debates WHERE assertion LIKE '%inspiration%' OR '%x%' ^为什么此SQL查询会给出语法错误?

它与SQLite的

+2

为什么?因为它无效SQL –

+0

@a_horse_with_no_name它可以在sqlite上运行,我通过运行sql在sqlitepy中试用了它,它工作正常,并且它也在我的Web浏览器中工作。 – desbest

+1

那么SQLite支持非标准的SQL。根据SQL标准,它**是无效的。我认为基本上所有其他的DBMS也会拒绝这一点(Oracle,DB2,Firebird,SQL Server肯定会这样做) –

回答

3

您需要明确指定列,如:

SELECT * 
FROM debates 
WHERE assertion LIKE '%inspiration%' 
    OR assertion LIKE '%X%' 

你还可以尝试:

SELECT * 
FROM debates t 
JOIN 
(
    SELECT '%inspiration%' Col 
    UNION ALL 
    SELECT '%X%' 
) List 
ON t.assertion LIKE List.Col 
1

or连接布尔表达式。字符串常量不是布尔表达式。

这是标准SQL(对于以这种方式使用or的大多数语言都是通用的)。答案很简单:

where assertion like '%inspiration%' or assertion like '%x%' 

或使用正则表达式:

where assertion ~ 'inspiration|x'