【问题标题】:how to use find_in_set of mySQL in SYBASE?如何在SYBASE中使用mySQL的find_in_set?
【发布时间】: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 sybase


    【解决方案1】:

    由于 Sybase 没有 find_in_set 之类的功能,因此您有两个选择:谷歌搜索一个将逗号分隔列表解析为临时表的函数,或者使用带有执行命令的动态 SQL。

    【讨论】:

    • 我知道 sybase 没有 find_in_set 。我尝试调用与 sybase 中相同的函数
    【解决方案2】:

    注意:您没有提及您使用的是哪个 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

    【讨论】:

    • 对不起,我用的是 ASE,我用 IN 来修复它。顺便说一句,在 java 8 中我必须使用 StringJoiner userids = new StringJoiner("','","'","'"); userids.add("id1"); userids.add("id2"); 来调用查询
    • 啊,是的,如果您对列表进行硬编码,那么只需重写查询以使用 in (显然)会容易得多 eh :-)
    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 2019-05-26
    • 2019-05-20
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多