当前位置: 首页 > 面试题库 >

SQL:在唯一索引中进行类型转换

太叔航
2023-03-14
问题内容
CREATE TABLE foo (
    dt AS DATE,
    ts AS TIMESTAMP
);

什么是创建一个唯一约束的正确方法,其中的日期值ts每秒发生一次dt; 例子:

dt         | ts
2010-01-02 | 2010-01-02 17:19:08
2010-01-02 | 2011-11-11 01:01:01
2010-01-02 | 2011-11-11 17:19:08 -- would error on insert (already a 2011-11-11)

试图:

  1. 语法无效,但是我要达到的目的是:

    CREATE UNIQUE INDEX unique_tsdate_per_dt ON foo(dt,ts::date);
    
  2. 尝试未完成-可能是子查询?

    CREATE UNIQUE INDEX unique_tsdate_per_dt ON foo(dt) WHERE ts::date -- ?
    

问题答案:

我认为您正在寻找::date演员表的功能形式:

CREATE UNIQUE INDEX unique_tsdate_per_dt ON foo(dt, date(ts));

然后,您将获得如下结果:

=> insert into foo (dt, ts) values ('2010-01-02', '2010-01-02 17:19:08');
=> insert into foo (dt, ts) values ('2010-01-02', '2011-11-11 01:01:01');
=> insert into foo (dt, ts) values ('2010-01-02', '2011-11-11 17:19:08');
ERROR:  duplicate key value violates unique constraint "unique_tsdate_per_dt"
DETAIL:  Key (dt, date(ts))=(2010-01-02, 2011-11-11) already exists.


 类似资料:
  • 问题内容: 我有一个按TRANSACTION_DATE_TIME分区的表。 表中有一列:ID。 我想为分区方案上的ID创建唯一索引: 但是SQL表示“唯一索引的分区列必须是索引键的子集”。 我真的不需要此索引中的TRANSACTION_DATE_TIME列。 如何在不使用TRANSACTION_DATE_TIME列的情况下创建索引? 问题答案: 或者你创建 非 -partitioned索引,或者您

  • 以下两者之间有区别吗: 以及: 在这两种情况下,名称是否唯一?索引唯一时意味着什么? 编辑:Postgres是唯一的约束,而索引没有回答我的问题。它考虑了FK的情况。我的问题与FK无关。我只想知道在这个例子中,这两个操作是否等价,其中不涉及FK。

  • CreateIndexes 根据struct中的tag来创建索引 CreateUniques 根据struct中的tag来创建唯一索引

  • 问题内容: 不知道在PostgreSQL 9.3+中是否可行,但是我想在非唯一列上创建唯一索引。对于像这样的表: 我想仅能[快速]查询不同的日子。我知道我可以用来帮助执行不同的搜索,但是如果不同值的数量大大少于索引覆盖的行数,这似乎会增加额外的开销。就我而言,大约30天中有1天与众不同。 我是创建关系表以仅跟踪唯一条目的唯一选择吗?思维: 并在每次插入数据时使用触发器来更新它。 问题答案: 索引只

  • 问题内容: 就性能而言,MySQL唯一索引和非唯一索引有什么区别? 假设我要在2列的组合上创建索引,并且该组合是唯一的,但是我创建了一个非唯一的索引。这会对MySQL使用的性能或内存产生重大影响吗? 同样的问题, 主 键和 唯一 索引之间有区别吗? 问题答案: UNIQUE和PRIMARY KEY是 约束 ,而不是索引。尽管大多数数据库通过使用索引来实现这些约束。除了索引之外,约束的额外开销也微不

  • 问题内容: 我想将字符串中包含的字母的索引转换为整数值。尝试读取头文件,但找不到的类型,尽管它似乎符合使用方法的协议(例如)。 任何帮助表示赞赏。 问题答案: 编辑/更新: Xcode 11•Swift 5.1或更高版本 游乐场测试