Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server 如何使数据类型与1980年一样,而不是T-SQL的14.08.1980?_Sql Server_Tsql - Fatal编程技术网

Sql server 如何使数据类型与1980年一样,而不是T-SQL的14.08.1980?

Sql server 如何使数据类型与1980年一样,而不是T-SQL的14.08.1980?,sql-server,tsql,Sql Server,Tsql,我正在尝试在Transact-Sql中创建一个列,并希望使该列的类型仅为一年。例如1980年,而不是1980年8月14日。谢谢..您需要使用: 您需要使用: 如果列是DATETIME,请使用DATEPART()函数: DECLARE @DATES TABLE ( ID INT , VALUE DATETIME); DECLARE @NUM INT = 3; WHILE @NUM >=0 BEGIN INSERT INTO @DATES VALUES (@NUM,

我正在尝试在Transact-Sql中创建一个列,并希望使该列的类型仅为一年。例如1980年,而不是1980年8月14日。谢谢..

您需要使用:

您需要使用:


如果列是
DATETIME
,请使用
DATEPART()
函数:

DECLARE @DATES TABLE ( ID INT , VALUE DATETIME);
DECLARE @NUM INT = 3;

WHILE @NUM >=0
    BEGIN
        INSERT INTO @DATES VALUES (@NUM, DATEADD(YY,-@NUM,GETDATE() ) );
        SET @NUM = @NUM -1;
   END

SELECT ID , VALUE , DATEPART( YY , VALUE) [YEAR] FROM @DATES
ORDER BY ID ASC;

如果您参考
Create Type
,则可以看到。

如果您的列是
DATETIME
,请使用
DATEPART()
函数:

DECLARE @DATES TABLE ( ID INT , VALUE DATETIME);
DECLARE @NUM INT = 3;

WHILE @NUM >=0
    BEGIN
        INSERT INTO @DATES VALUES (@NUM, DATEADD(YY,-@NUM,GETDATE() ) );
        SET @NUM = @NUM -1;
   END

SELECT ID , VALUE , DATEPART( YY , VALUE) [YEAR] FROM @DATES
ORDER BY ID ASC;

如果参考
创建类型
,则可以看到。

如果希望在列中仅存储年份,则可以使用SMALLINT数据类型。如果收到的输入格式为datetime,并且您只想从中捕获年份部分,则在insert语句中使用DATEPART(year,datetime)以仅使用年份。

如果您只想在列中存储年份,则可以使用SMALLINT数据类型。如果收到的输入格式为datetime,并且您只想从中捕获年份部分,则在insert语句中使用DATEPART(年份,datetime)以仅使用年份。

年份是整数值。 假设它只是一个你想要的整数,而不是一个实际的日期,你可以使用像

DECLARE @data TABLE ( ID INT , [Year] INT);

INSERT INTO @data [Year] VALUES (1980);

SELECT ID, [Year] FROM @data;
年份是整数值。 假设它只是一个你想要的整数,而不是一个实际的日期,你可以使用像

DECLARE @data TABLE ( ID INT , [Year] INT);

INSERT INTO @data [Year] VALUES (1980);

SELECT ID, [Year] FROM @data;

如果年份值在最后4位是通用的,则可以轻松使用以下值:


右(列名称,4)作为年值

如果年值是公共的,则最后4位数字可以轻松使用以下数字:


RIGHT(column\u name,4)作为YearValue

通过更改数据类型,数据不会更改。您需要手动更新记录,使其仅具有年份,然后将数据类型更改为small Inti如果要保留基础日期,请使用创建一个新的计算列,或创建一个视图来替换使用相同日期列的日期列。您应该包含实际的架构定义以获得有效答案。如果您的列存储的是文本
14.08.1980
varchar
nvarchar
,而不是
datetime
,则需要另一种解决方案。Filburt 11,如何在此处添加照片?不要使用屏幕截图发布架构信息-右键单击Sql Management Studio中的表并选择“脚本为->创建到->剪贴板“并复制到此处的帖子。通过更改数据类型,数据不会更改。”。您需要手动更新记录,使其仅具有年份,然后将数据类型更改为small Inti如果要保留基础日期,请使用创建一个新的计算列,或创建一个视图来替换使用相同日期列的日期列。您应该包含实际的架构定义以获得有效答案。如果您的列存储的是文本
14.08.1980
varchar
nvarchar
,而不是
datetime
,则需要另一种解决方案。Filburt 11,如何在此处添加照片?不要使用屏幕截图发布架构信息-右键单击Sql Management Studio中的表并选择“脚本为->创建到->剪贴板”并复制到您的帖子。