可你刚刚不是说kingbase8也支持这函数吗
时间: 2024-03-16 07:41:06 浏览: 13
非常抱歉,我之前的回答有误。在 Kingbase8 中,确实支持 FIND_IN_SET 函数,您无需进行任何更改。
您可以使用以下查询来实现您的目标:
```
SELECT * FROM role r, djd_user u WHERE FIND_IN_SET(u.user_id, r.users) > 0;
```
这个查询将在 role 表和 djd_user 表之间执行一个连接,并使用 FIND_IN_SET 函数来查找包含在 r.users 字段中的 u.user_id 值。如果找到匹配项,则函数返回一个大于零的值,此时该行将被包括在结果集中。
请注意,虽然 Kingbase8 支持 FIND_IN_SET 函数,但它可能不是最优选项,因为它需要在每个行上执行字符串操作。如果您的数据量很大,您可能需要考虑重新设计您的数据库模式,以便更有效地查询数据。
相关问题
kingbase8也有这个函数吗
是的,Kingbase8数据库也支持 `FIND_IN_SET` 函数。其语法与 MySQL 中基本相同。你可以使用以下查询语句来查找包含特定 id 的记录:
```
SELECT * FROM your_table WHERE FIND_IN_SET('your_id', A::text) > 0;
```
其中 `your_table` 是你要查询的表名,`your_id` 是你要查找的 id 值,`A` 是包含 id 值的字段名。需要注意的是,在 Kingbase8 中,需要将字段 `A` 显式转换为 `text` 类型,才能使用 `FIND_IN_SET` 函数。
我要的kingbase的存储过程不是函数
非常抱歉,我的回答有误。在Kingbase中,存储过程的创建方式与函数类似,只需要将返回类型改为`void`即可。以下是修改后的Kingbase存储过程语句:
DROP PROCEDURE IF EXISTS schema_change;
CREATE PROCEDURE schema_change() AS $$
BEGIN
CREATE TABLE IF NOT EXISTS "bis_record_upload_list" (
"pkid" serial NOT NULL,
"hash_code" character varying(255) DEFAULT NULL,
"path" character varying(255) DEFAULT NULL,
CONSTRAINT "bis_record_upload_list_pk" PRIMARY KEY ("pkid"),
CONSTRAINT "bis_record_upload_list_hash_code_key" UNIQUE ("hash_code")
);
IF NOT EXISTS (SELECT * FROM information_schema.columns WHERE table_schema = current_schema() AND table_name = 'bis_record_upload_list' AND column_name = 'hash_code') THEN
ALTER TABLE "bis_record_upload_list" ADD COLUMN "hash_code" character varying(255) DEFAULT NULL;
END IF;
END;
$$ LANGUAGE PLPGSQL;
CALL schema_change();
DROP PROCEDURE IF EXISTS schema_change;