求助SQL语句,更新出生日期字段,年份+20,但月和日始终保持为1月1日

[复制链接]
查看11 | 回复4 | 2010-7-22 21:36:10 | 显示全部楼层 |阅读模式
例如,出生日期是1980-5-6,更新后为2000-1-1
1楼的1935-7-8加过20变成2027-1-1了
update Core_Objects set CHRQ=convert(varchar(4),convert(int, left(CSRQ,4))+20)+'-1-1' WHERE
idcard='342121193507086845'
2楼的我用的是SQL2005,提示20附近有语法错误
UPDATE Core_Objects
SETchrq=dateadd(dateadd(dateadd(csrq,interval 20 year),interval -month(csrq)+1 month),interval -day(csrq)+1 day) WHERE idcard='342121193507086845'

回复

使用道具 举报

千问 | 2010-7-22 21:36:10 | 显示全部楼层
为你提供三种SQL Server的处理方法,先声明一个日期类型的变量,如果是更新表,那就把变量换成字段名即可。declare @date smalldatetimeselect @date='1980-05-06'--第一种方案select cast(year(@date)+20 as char(4))+'-01-01'--第二种方案select cast(left(convert(varchar(10),@date,20),4)+20 as char(4))+'-01-01'--第三种方案,复杂很多select cast(year(@date)+20 as varchar(4))+'-'+cast(month(
回复

使用道具 举报

千问 | 2010-7-22 21:36:10 | 显示全部楼层
select str(year(dateadd(yyyy,20,csrq)))+'-01-01' from 表名
回复

使用道具 举报

千问 | 2010-7-22 21:36:10 | 显示全部楼层
这个容易,先把日期的前四位取出,转换成int型,加上20,再转成字符型,加上'-1-1',更新数据就可以了。update tableName set date=convert(varchar(4),convert(int, left(date))+20)+'-1-1'
回复

使用道具 举报

千问 | 2010-7-22 21:36:10 | 显示全部楼层
先加20年,再减月份+1,再减日期+1MYSQL:UPDATE tableSETcolumn=date_add(date_add(date_add(column,interval 20 year),interval -month(column)+1 month),interval -day(column)+1 day)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行