Mee*_*eem 52 postgresql varchar integer casting
在这里,我尝试创建视图,如下所示:
例:
create view view1
as
select table1.col1,table2.col1,table3.col3
from table1
inner join
table2
inner join
table3
on
table1.col4 = table2.col5
/* Here col4 of table1 is of "integer" type and col5 of table2 is of type "varchar" */
/* ERROR: operator does not exist: integer = character varying */
....;
Run Code Online (Sandbox Code Playgroud)
注意:在sql server中执行相同的查询但在postgreSQL中遇到上述错误.
Tim*_*san 56
我认为它告诉你到底出了什么问题.您无法将整数与varchar进行比较.PostgreSQL是严格的,不会为你做任何魔术类型转换.我猜SQLServer自动进行类型转换(这是一件坏事).
如果要比较这两种不同的动物,则必须使用转换语法将其中一种转换为另一种::.
这些方面的东西:
create view view1
as
select table1.col1,table2.col1,table3.col3
from table1
inner join
table2
inner join
table3
on
table1.col4::varchar = table2.col5
/* Here col4 of table1 is of "integer" type and col5 of table2 is of type "varchar" */
/* ERROR: operator does not exist: integer = character varying */
....;
Run Code Online (Sandbox Code Playgroud)
注意varchartable1.col4上的类型转换.
另请注意,类型转换可能会使该列上的索引无法使用并且性能下降,这非常糟糕.更好的解决方案是查看是否可以永久更改两种列类型中的一种以匹配另一种.彻底改变你的数据库设计.
或者,您可以使用自定义的不可变函数在已转换的值上创建索引,该函数会在列上强制转换值.但这也可能证明不是最理想的(但比现场演员更好).