gpt4 book ai didi

sql-server - 将日期时间变量更改为仅变量的年份

转载 作者:行者123 更新时间:2023-12-01 13:27:41 25 4
gpt4 key购买 nike

我有一个名为 DOB 的日期变量。我只想更新表格,因此 DOB 只是 DOB 的年份

第一个计划已更新

  @table set @variable = convert(int, year(@variable))

或者类似的东西

  set @variable = year(@variable)

但它首先告诉我我无法将日期时间转换为 int

然后我尝试说

DOBint = year(DOB)

等等,但我最终不能放弃DOB,因为

Msg 5074, Level 16, State 1, Line 1
The statistics 'DOB' is dependent on column 'DOB'.

Msg 4922, Level 16, State 9, Line 1
ALTER TABLE DROP COLUMN DOB failed because one or more objects access this column.

尽管这是一个数据库,我只是从服务器复制到我的机器上进行播放和测试。

drop statistics traveldoc.DOB 

什么都不做

select * from sys.stats where name = 'DOB'

似乎应该有一种简单的方法可以做到这一点,而无需删除/添加列,然后重命名列

从日期中删除日期和月份并将其保留在同一变量上的简单方法?

我使用的是 SQL Server 2008

谢谢

编辑:我的功能的大部分

DECLARE @action nvarchar(MAX);
DECLARE @table nvarchar(128);
DECLARE @variable nvarchar(MAX);

DECLARE rowCurser CURSOR FOR SELECT [Column1], Column2, Column3 FROM tempdb.dbo.DataAvailableForAnalysis;
OPEN rowCurser;
FETCH rowCurser INTO @table, @variable, @action

WHILE @@FETCH_STATUS = 0
BEGIN
SET @action = REPLACE(REPLACE(@action, '@table', @Table), '@variable', @variable);
--if OBJECT_ID(N'@table',N'U') IS NOT NULL
--BEGIN
EXECUTE(@action);FETCH rowCurser INTO @table, @variable, @action
--END
END
CLOSE rowCurser;
DEALLOCATE rowCurser;

在这种情况下,该变量的@action 将是

declare @variable datetime   update @table  set @variable= DATEPART(YYYY,@variable)

更新#2:

所以我认为添加一些上下文会有所帮助我有一个表,其中包含某些变量/表的操作

比如

create table ##actiontable
(
actionname nvarchar(max) ,
tablename nvarchar(128),
variablename nvarchar(max)
)

insert into ##test3
values ('update @table set @variable=1', 'NcsAnalytics13.dbo.ReplicationObject', 'Target' )

在这种情况下,表 NcsAnalytics13.dbo.ReplicationObject 中的变量目标将设置为 1

我真正的##actiontable充满了针对不同变量的不同更新语句。我唯一在更新时遇到麻烦的是 DOB,我想在其中删除变量中的日期和月份(这是为了消除个人身份信息)。我需要保持相同的变量名称,但很难创建新变量、删除旧变量并重命名,因为由于某种原因,有一些与 DOB 连接的统计数据我无法弄清楚,所以我不能删除它。

最佳答案

您想要日期部分

@variable = DATEPART(yyyy,@Variable)

http://www.w3schools.com/sql/func_datepart.asp

Declare @variable datetime,
@converted int,
@converted2 datetime

Set @variable = GetDate();
Set @converted = Cast(DatePart(yyyy, @variable) as int)
Set @converted2 = Cast('1/1/' + cast(@converted as varchar) as datetime)

select @variable;
Select @converted;
Select @converted2;

根据您的更新进行更新

DECLARE @action nvarchar(MAX);
DECLARE @table nvarchar(128);
DECLARE @variable datetime;

DECLARE rowCurser CURSOR FOR SELECT [Column1], Column2, Column3 FROM tempdb.dbo.DataAvailableForAnalysis;
OPEN rowCurser;
FETCH rowCurser INTO @table, @variable, @action

WHILE @@FETCH_STATUS = 0
BEGIN
SET @action = REPLACE(REPLACE(@action, '@table', @Table), '@variable', cast(DATEPART(yyyy,@variable) as varchar));
--if OBJECT_ID(N'@table',N'U') IS NOT NULL
--BEGIN
EXECUTE(@action);FETCH rowCurser INTO @table, @variable, @action
--END
END
CLOSE rowCurser;
DEALLOCATE rowCurser;

关于sql-server - 将日期时间变量更改为仅变量的年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35073913/

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