【问题标题】:How to use only the year of a DateTime column in a SQL Unique Constrain?如何在 SQL 唯一约束中仅使用 DateTime 列的年份?
【发布时间】:2014-02-04 16:02:07
【问题描述】:

我正在创建一个唯一约束,它只允许每年使用一个注册表号, 我的意思是在注册表中可以存在多个数字 2,但前提是这个 是在不同年份创建的。我听说可以用 Unique 来做 ir 约束,但我不知道如何,不需要为年份和月份创建一个列,等等。

查询

ALTER TABLE dbo.correspondencia_FFAA

添加约束 uk_correspondecia UNIQUE (num_corres, fecha_cre);

num_corres 是注册号,fecha_cre 是创建日期,但我只需要年份而不是整个列,可以吗

谢谢

【问题讨论】:

    标签: sql sql-server unique-key


    【解决方案1】:

    使用计算列,然后创建索引。比如:

    alter table registry add RegistryYear as year(RegistryDate);
    
    create index registry_number_year on Registry(number, RegistryYear);
    

    【讨论】:

      【解决方案2】:

      嗯,在 SQL Server 中,有一个名为“DATE”的数据类型 - 您可以使用该列并在其上创建索引。

      当然,您也可以将“DATE”类型的计算列添加到表中,只需将 DATETIME 列的日期部分填充到该计算列中,使其成为 PERSISTED 并为其编制索引。应该可以正常工作!

      ALTER TABLE dbo.Entries
         ADD yearOnly as Year(CAST(CompositionDate AS DATE)) PERSISTED
      
      CREATE UNIQUE INDEX UX_Entries ON Entries(yearOnly , Slug)
      

      【讨论】:

      • 嘿,我听从你关于使用 UNIQUE INDEX 的建议,但现在我遇到了另一个问题,我创建的程序在创建具有相同数字和日期的行时没有收到任何错误(它不会创建行),但我需要这个板条箱出现错误,以便用户可以更正。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多