【发布时间】:2017-11-24 00:00:42
【问题描述】:
之前,我在mySQL 中使用find_in_set(idField,:ids) 来删除或更新多个id 以逗号分隔的字段,例如:
UPDATE USER SET name = 'a' WHERE find_in_set(id,'1,2,3,4') > 0
如何自定义查询并在 SyBase 中使用它?
【问题讨论】:
之前,我在mySQL 中使用find_in_set(idField,:ids) 来删除或更新多个id 以逗号分隔的字段,例如:
UPDATE USER SET name = 'a' WHERE find_in_set(id,'1,2,3,4') > 0
如何自定义查询并在 SyBase 中使用它?
【问题讨论】:
由于 Sybase 没有 find_in_set 之类的功能,因此您有两个选择:谷歌搜索一个将逗号分隔列表解析为临时表的函数,或者使用带有执行命令的动态 SQL。
【讨论】:
注意:您没有提及您使用的是哪个 Sybase 数据库产品(ASE?SQLAnywhere?IQ?Advantage?),也没有提及版本。虽然 ASE 没有 find_in_set() 之类的东西,但我不能代表其他数据库产品。
从 ASE 的角度来看,您有几个选择:
创建您自己的用户定义函数;您有 T-SQL(自 ASE 15.0.2 起)和 Java 选项
构建动态查询并通过execute()提交
重写查询以使用可用的 ASE 函数(例如,patindex()、charindex())
重写您的查询以使用 like 运算符(有关示例,请参见 alternate to find_in_set() for non-MySQL databases)
【讨论】:
StringJoiner userids = new StringJoiner("','","'","'"); userids.add("id1"); userids.add("id2"); 来调用查询
in (显然)会容易得多 eh :-)