Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何仅将年份指定为数据类型?_Sql_Sql Server 2008_Tsql_Ssms 2012 - Fatal编程技术网

Sql 如何仅将年份指定为数据类型?

Sql 如何仅将年份指定为数据类型?,sql,sql-server-2008,tsql,ssms-2012,Sql,Sql Server 2008,Tsql,Ssms 2012,我正在创建一个表,希望将一个字段存储为日期数据类型。但是,我只想存储年份,不想存储其他信息(例如:月、日或时间) 以下是我到目前为止的情况: CREATE TABLE Project (ProjectID int not null identity(1,1) unique ,PreviousYear1 date -- I need this format: (YYYY) ) 关于如何存储仅限年份的日期数据类型,有什么建议吗?我在ssms-2012

我正在创建一个表,希望将一个字段存储为日期数据类型。但是,我只想存储年份,不想存储其他信息(例如:月、日或时间)

以下是我到目前为止的情况:

CREATE TABLE Project
(ProjectID int not null identity(1,1) unique
,PreviousYear1 date                         -- I need this format: (YYYY)
)

关于如何存储仅限年份的日期数据类型,有什么建议吗?我在ssms-2012工作。我的目标是在以后不必转换数据类型或将其更改为仅显示年份的情况下实现这一点

我们不能,但您可以使用:

CREATE TABLE Project(
    ProjectID int not null identity(1,1) unique
    ,PreviousYear1 VARCHAR(4) -- To save the year only, INT it's better ;)
)
保存记录时,只需输入一个带有年份的字符串:)


您应该使用INT数据类型,并在表上设置一些检查约束,以强制执行合理的值,如无负数等。日期数据类型正是完整的日期。

创建表项目
CREATE TABLE Project
(ProjectID int not null identity(1,1) unique
,PreviousYear1 smallint   
 CONSTRAINT CHK_PreviousYear1_validity 
   CHECK (PreviousYear1 >= 1000 and PreviousYear1 <= 9999)                       
)
(ProjectID int非空标识(1,1)唯一 ,上一年1 smallint 约束CHK_上一年1_有效性
检查(PreviousYear1>=1000和PreviousYear1下面的SQL将向您展示如何使用检查约束来执行此操作(根据您的要求更新年份范围):


所以您只需要一个INT列?在Sql-server-2008中,如果您想存储日期时间数据,它将仅以“年-月-日-小时:分钟:秒.毫秒”格式保存。因此,INT或varchar都可以。没有选择在datetime字段中只存储年。@user1221684不是特别的,但根据下面的答案,我猜您建议我将年存储为INT值?为什么不可以..您甚至可以使用SMALLINTA DateTime,它必须包含所有组件。即使您输入时没有时间,它也必须以午夜为单位,并且您必须指定月份和日期。插入到项目中(PreviousYear1)值('bad'),('miss')如何?)逻辑层负责这一点;)它被标记为SQL。你到底为什么要在VARCHAR(4)中存储一年?这个家伙想存储一年,但在Transact-SQL中,不可能使用默认数据类型来存储,但他可以使用VARCHAR或INT或UINT或SMALLINT等。VARCHAR(4)只是一个示例:)VARCHAR(4)是一个不限制为4位年份的示例。SQL中没有单位。您只需使用
(介于1901和9999之间的PreviousYear1)而不是
(PreviousYear1>1900和len(PreviousYear1)=4)
。它更快更清晰。
CREATE TABLE Project
(ProjectID int not null identity(1,1) unique
,PreviousYear1 smallint   
 CONSTRAINT CHK_PreviousYear1_validity 
   CHECK (PreviousYear1 >= 1000 and PreviousYear1 <= 9999)                       
)
CREATE TABLE Project
  (
    ProjectID int not null identity(1,1) unique,
    PreviousYear1 int 

    CONSTRAINT CHK_PreviousYear1_validity 

    CHECK (PreviousYear1 > 1900 and len(PreviousYear1) = 4)                     
  )