我能';无法修复这个看似简单、与强制转换相关的postgresql错误

我能';无法修复这个看似简单、与强制转换相关的postgresql错误,postgresql,types,casting,Postgresql,Types,Casting,因此,我有一个疑问: SELECT count(*) AS count FROM table1 INNER JOIN "some query" WHERE "some more query" OR (table.smowid NOT LIKE (58)) OR "rest of query" 很抱歉代码不清楚,完整的查询非常大,但问题出在表中。smowid不像(58)部分 这是我得到的错误: ERROR: operator does not exist: integer !~~ inte

因此,我有一个疑问:

SELECT count(*) AS count FROM table1 INNER JOIN "some query" 
WHERE "some more query" 
OR (table.smowid NOT LIKE (58)) OR "rest of query"
很抱歉代码不清楚,完整的查询非常大,但问题出在
表中。smowid不像(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)不喜欢(58)
来进行强制转换,但这不起作用,我也试着
(table.smowid::INTEGER)不喜欢(58)
,但出于某种原因也不起作用


那么,我该怎么办?谢谢您的帮助。

不喜欢
及其等价物
~~绝对不是整数运算符。你想用一个整数做什么


有一种方法可以使用它,但您首先必须将整数转换为文本。

及其等价物
不同~~绝对不是整数运算符。你想用一个整数做什么


有一种方法可以使用它,但是你首先必须将整数转换为文本。

你应该将它们都转换为文本,或者更好的是,有一个
smowis
列,其中所有
smowi
值都作为文本,以节省每次转换的开销。

你应该将它们转换为文本,或者更好的是,有一个
smowis
列,其中包含所有
smowi
值作为文本,以节省每次强制转换的开销。

hmm,我没有编写代码,所以我不太理解,但你是说模式匹配操作符(即类似的东西)对整数不起作用吗?这很有趣,所以如果我将table.smowid位和模式都转换为文本,它会起作用吗?我只是好奇,但这在MySQL中会起作用吗?这段代码最初是用MySQL编写的对于这个扩展背后的rational,你应该问MySQL开发者。嗯,我没有写代码,所以我不太理解,但是你是说模式匹配操作符(例如类似的东西)对整数不起作用?这很有趣,如果我将table.smowid位和模式都转换为文本会起作用吗?我只是好奇,但这在MySQL中会起作用吗?代码最初是用MySQL编写的。引用自:“在MySQL中,数值表达式允许使用LIKE(这是标准SQL LIKE的扩展)。”。对于这个扩展背后的rational,你应该询问MySQL开发人员。是的,转换为文本似乎已经解决了这个问题,只是好奇,但是::text和转换为文本之间有什么区别?我很确定它只是语法上的糖,做了同样的事。
myval::text
text myval
CAST myvalas text
在postgres中是100%等效的。后者是标准的SQL语法。
myval::text
是我的首选样式,因为它最容易阅读。是的,casting as text似乎已经解决了这个问题,只是好奇,但是::text和CAST as text之间有什么区别?我很确定它只是语法上的糖分和语法上的差异做同样的事情。
myval::text
text myval
cast myval as text
在postgres中是100%等效的。后者是标准SQL语法。
myval::text
是我首选的样式,因为它最容易阅读。