2011-09-27 55 views
0

所以,我有這個疑問:我不能修復這個看似簡單,投相關,PostgreSQL的錯誤

SELECT count(*) AS count FROM table1 INNER JOIN "some query" 
WHERE "some more query" 
OR (table.smowid NOT LIKE (58)) OR "rest of query" 

對不起,我不清楚代碼,全面查詢是相當大的,但問題是在table.smowid NOT LIKE (58)部分。

這是錯誤我得到:

ERROR: operator does not exist: integer !~~ integer 
LINE 11: or ((table.smowid) NOT LIKE (58)) 
          ^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. 

我遺憾的是,不知道很多關於石膏和類型,但爲什麼是DB時,它從整數去整數抱怨? 我試着說,(CAST (table.smowid) AS INTEGER) NOT LIKE (58),但沒有奏效,我也試過(table.smowid :: integer) NOT LIKE (58),但也沒有工作出於某種原因。

那麼,我該怎麼辦?感謝所有的幫助。

回答

2

您應該將它們都轉換爲文本或者更好的方法是將所有smowi值的smowis列作爲文本保存每次投射的開銷。

+0

作爲文本的YUP鑄造似乎已經解決了這個問題,只是好奇,但什麼是不同之處:: TEXT和CAST AS TEXT? – zermy

+2

我很肯定它只是語法上的糖而且做同樣的事情 –

+1

'myval :: text','text myval'和'cast myval as text'是100%等價的在postgres中,後者是標準的SQL語法,'myval :: text'是我喜歡的樣式,因爲它最容易閱讀。 –

2

NOT LIKE及其等效!~~絕對不是整數運算符。你想在整數上用pattern matching operators做什麼?

有一種使用方法,但您首先必須將整數(或format)整數轉換爲文本。

+0

嗯,我沒有編寫代碼,所以我不明白這一切,但你是說模式匹配運算符(即LIKE thingy)不適用於整數?這很有趣,如果我將table.smowid位和模式都作爲文本來投放,它會如何工作? 我只是好奇,但會在MySQL中工作?該代碼最初是用MySQL編寫的。 – zermy

+1

引用(來自[MySQL手冊](http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html)):「在MySQL中,數字表達式允許使用LIKE。是對標準SQL LIKE的擴展)「。對於這個擴展的理性背後,你應該問MySQL開發人員。 –

+0

哈哈,謝謝你一堆。 – zermy

相關問題