2015-09-06 70 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'