Postgres @sqlupdate 转换数据类型
Postgres @sqlupdate casting data type
我有个小问题想寻求帮助。
在我的 Postgres table "user_profile" 中,我将以下 "video_uploaded" 列定义为
id | character(19)
videos_uploaded | character(19)[] |
其中存储视频 ID(19 个字符的固定长度)。
当我在 DAO 接口中使用 array_append
函数编写 @SqlUpdate
时,如下所示
@SqlUpdate("UPDATE user_profile set videos_uploaded = array_append(videos_uploaded, :vid) where id = :id")
void appendVideoToUpload(@Bind("id") String id, @Bind("vid") String vid);
程序总是抛出以下异常
ERROR: function array_append(character[], character varying) does not exist
! Hint: No function matches the given name and argument types. You might need to add explicit type casts
似乎要求添加显式类型转换,然后我添加转换如
array_append(videos_uploaded::varchar[], :vid::varchar)
但类似的异常仍然发生。任何熟悉这个问题的人都可以提供一些快速帮助吗?谢谢!
罗伊
Char 和 varchar 是不同的数据类型,因此采用 anyarray, anyelement
的函数将失败。两个参数必须是同一类型,所以你可以试试
= array_append(videos_uploaded::varchar[], :vid)::char(19)[]
或
= array_append(videos_uploaded, (:vid)::char(19))
如果您的软件在参数和双冒号转换方面存在问题(这很可能是因为参数是基于冒号而不是基于问号的 (?
),请改用 CAST:
= CAST(array_append(CAST(videos_uploaded AS varchar[]), :vid) AS char(19)[])
或
= array_append(videos_uploaded, CAST(:vid AS char(19)))
我有个小问题想寻求帮助。
在我的 Postgres table "user_profile" 中,我将以下 "video_uploaded" 列定义为
id | character(19)
videos_uploaded | character(19)[] |
其中存储视频 ID(19 个字符的固定长度)。
当我在 DAO 接口中使用 array_append
函数编写 @SqlUpdate
时,如下所示
@SqlUpdate("UPDATE user_profile set videos_uploaded = array_append(videos_uploaded, :vid) where id = :id")
void appendVideoToUpload(@Bind("id") String id, @Bind("vid") String vid);
程序总是抛出以下异常
ERROR: function array_append(character[], character varying) does not exist ! Hint: No function matches the given name and argument types. You might need to add explicit type casts
似乎要求添加显式类型转换,然后我添加转换如
array_append(videos_uploaded::varchar[], :vid::varchar)
但类似的异常仍然发生。任何熟悉这个问题的人都可以提供一些快速帮助吗?谢谢!
罗伊
Char 和 varchar 是不同的数据类型,因此采用 anyarray, anyelement
的函数将失败。两个参数必须是同一类型,所以你可以试试
= array_append(videos_uploaded::varchar[], :vid)::char(19)[]
或
= array_append(videos_uploaded, (:vid)::char(19))
如果您的软件在参数和双冒号转换方面存在问题(这很可能是因为参数是基于冒号而不是基于问号的 (?
),请改用 CAST:
= CAST(array_append(CAST(videos_uploaded AS varchar[]), :vid) AS char(19)[])
或
= array_append(videos_uploaded, CAST(:vid AS char(19)))