gpt4 book ai didi

mysql - 什么是 Oracle 中 MySQL Set 数据类型的等价物?

转载 作者:搜寻专家 更新时间:2023-10-30 21:49:04 25 4
gpt4 key购买 nike

在 MySQL 中,我们可以使用 Set 数据类型为任何特定行的每一列选择多个值,如下所示:

CREATE TABLE `staff` ( `StaffID` int(5) NOT NULL AUTO_INCREMENT,
`Availability` set('Mon','Tue','Wed','Thur','Fri','SatAM','SatPM','Sun') DEFAULT NULL,
PRIMARY KEY (`StaffID`))

那我可以,

INSERT INTO `staff` (`Availability`) VALUES ('Tue,Wed,SatPM')

我试图到处寻找,但找不到任何合适的数据类型来存储上述在 Oracle 中的多个选定选项。 Oracle 文档似乎显示 MySQL 集别无选择,但我不敢相信他们没有!那么有人可以帮我澄清一下吗?

Oracle Documentation reference Original link

最佳答案

在 MySQL 中,set 数据类型是一种命名的位图数据类型。 Oracle 没有,但如果您真的想使用受约束的整数数据类型,您可以模拟它:

CREATE TABLE staff (
staffid INTEGER GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 NOCACHE ORDER ) NOT NULL PRIMARY KEY
, availability INTEGER CHECK ( availability BETWEEN 0 AND 256 )
);

您必须记住或构建一个函数来映射位图值和日期。

另一种选择是使用查找表:

create table availability as
with t1(id, mon, tue, wed, thu, fri, satam, satpm, sun) as (
select 0, 0, 0, 0, 0, 0, 0, 0, 0 from dual
union all
select id+1
, sign(bitand(id+1,1))
, sign(bitand(id+1,2))
, sign(bitand(id+1,4))
, sign(bitand(id+1,8))
, sign(bitand(id+1,16))
, sign(bitand(id+1,32))
, sign(bitand(id+1,64))
, sign(bitand(id+1,128))
from t1 where id+1 <256
)
select * from t1;

alter table availability add primary key (id);

CREATE TABLE staff (
staffid INTEGER GENERATED BY DEFAULT AS IDENTITY ( START WITH 1 NOCACHE ORDER ) NOT NULL PRIMARY KEY
, availability INTEGER
, CONSTRAINT staff_avail_fk FOREIGN KEY ( availability ) REFERENCES availability ( id )
);

关于mysql - 什么是 Oracle 中 MySQL Set 数据类型的等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53560322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com