首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新年份?

更新年份?
EN

Stack Overflow用户
提问于 2010-02-17 18:07:11
回答 4查看 156关注 0票数 3

使用sql server 2000

日期列数据类型为varchar

Table1

代码语言:javascript
复制
ID Date 

01 20100122
01 20100123
01 20100124
01 20100125
01 20100126
01 20090127
01 20090128
01 20090129
01 20090130
01 20090131
01 20090201
01 20100202
01 20090203
01 20100204
01 20100205
02 
.....

从上表可以看出,从1月26日到2003年2月,所有id的年份都显示错误。

我想只更新2010年而不是2009年,就像20100127而不是20000127

预期输出

代码语言:javascript
复制
ID Date

01 20100126
01 20100127
...
01 20100203
...
02

查询方式如下

代码语言:javascript
复制
update table1 set 2010 instead of 2009 where date between 20090126 and 20090203

如何查询更新值。

需要查询帮助

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-17 18:15:12

如果该列的类型为DATETIME,请查看DATEADD

代码语言:javascript
复制
SELECT GETDATE(),  DATEADD(year, 1, GETDATE())

对于VARCHAR,您可以尝试如下所示

代码语言:javascript
复制
DECLARE @Table TABLE(
        Date VARCHAR(8)
)

INSERT INTO @Table SELECT '20090301'

SELECT  *
FROM    @Table

UPDATE  @Table
SET     Date = '2010' + RIGHT(Date, 4)
WHERE   LEFT(Date,4) = '2009'

SELECT *
FROM    @Table

或者类似于

代码语言:javascript
复制
DECLARE @Table TABLE(
        ID VARCHAR(4),
        Date VARCHAR(8)
)

INSERT INTO @Table SELECT '01','20100122'
INSERT INTO @Table SELECT '01','20100123' 
INSERT INTO @Table SELECT '01','20100124' 
INSERT INTO @Table SELECT '01','20100125' 
INSERT INTO @Table SELECT '01','20100126' 
INSERT INTO @Table SELECT '01','20090127' 
INSERT INTO @Table SELECT '01','20090128' 
INSERT INTO @Table SELECT '01','20090129' 
INSERT INTO @Table SELECT '01','20090130' 
INSERT INTO @Table SELECT '01','20090131' 
INSERT INTO @Table SELECT '01','20090201' 
INSERT INTO @Table SELECT '01','20100202' 
INSERT INTO @Table SELECT '01','20090203' 
INSERT INTO @Table SELECT '01','20100204' 
INSERT INTO @Table SELECT '01','20100205' 

UPDATE  @Table
SET     Date = '2010' + RIGHT(Date, 4)
WHERE   Date >= '20090126'
AND     Date <= '20090203'
AND     ID = '01'

SELECT  *
FROM    @Table
票数 1
EN

Stack Overflow用户

发布于 2010-02-17 18:20:54

代码语言:javascript
复制
UPDATE Table1 
SET Date = Replace(Date, '2009', '2010') 
WHERE 
    DATE LIKE '2009%' 
AND
    convert(DATETIME, Date, 112) BETWEEN '2009-01-26 00:00:00' AND 
                                         '2009-02-03 23:59:59.999'
票数 1
EN

Stack Overflow用户

发布于 2010-02-17 18:26:05

一种更好的方法,避免替换9月20日

代码语言:javascript
复制
UPDATE Table1 Set Date = Replace(Date, '2009', '2010') WHERE DATE LIKE '2009%'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2279728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档