【发布时间】:2014-03-04 05:34:50
【问题描述】:
有问题。我有一张名为消费者的表。在该表中,有三列代表个人的出生日期。问题是 DOB 分为年、月、日。我想做的是将月份和日期列数据复制到年份列..
例如
year month day
1971 05 21
运行脚本后,我希望年份列中包含以下值:19710521
那我还想运行一个脚本来删除前2个整数(1971的“19”)
【问题讨论】:
标签: sql sql-server tsql
有问题。我有一张名为消费者的表。在该表中,有三列代表个人的出生日期。问题是 DOB 分为年、月、日。我想做的是将月份和日期列数据复制到年份列..
例如
year month day
1971 05 21
运行脚本后,我希望年份列中包含以下值:19710521
那我还想运行一个脚本来删除前2个整数(1971的“19”)
【问题讨论】:
标签: sql sql-server tsql
Select CAST([year] as varchar(4)) +
CASE WHEN [month]<10 THEN '0'+CAST([month] as varchar(2))
ELSE CAST([month] as varchar(2)) END +
CASE WHEN [day]<10 THEN '0'+CAST([day] as varchar(2))
ELSE CAST([day] as varchar(2)) END
as dateCol
From consumers
删除前两位数
SELECT RIGHT(dateCol,LEN(dateCol)-2)
FROM (
Select CAST([year] as varchar(4)) +
CASE WHEN [month]<10 THEN '0'+CAST([month] as varchar(2))
ELSE CAST([month] as varchar(2)) END +
CASE WHEN [day]<10 THEN '0'+CAST([day] as varchar(2))
ELSE CAST([day] as varchar(2)) END
as dateCol
From consumers
)Z
【讨论】:
1971521 的结果。
FROM 子句中添加表名consumers。并用结果更新year 列。
update consumers set year=cast(year as varchar(4))+cast(month as varchar(2))+cast(day as varchar(2))
这会将数据复制到年份列
如果年份列是 int 则
update consumers set year=cast(cast(year as varchar(4))+cast(month as varchar(2))+cast(day as varchar(2)) as int)
删除前 2 个数字
update consumers set year= SUBSTRING(cast(year as varchar(50)),3,LEN(year)-2)
【讨论】: