如何从varchar列获取新的列数据

时间:2016-02-19 08:07:36

标签: sql sybase

我得到了帮助以获取选择查询以获取正确的数据,但我如何将其插入表中。

Select RIGHT(RTRIM(Template_name), 2) country
from TABLE

这对我有用: 示例数据:

Template_name            Country
Party_package_US         US 
PARTY_Package_GB         GB 
Random_temp_DE           DE 

但主要问题是我如何在表格中插入template_name并仅将国家/地区首字母添加到新列。

我之前获得帮助的问题的链接:how to get info from VARCHAR column and create new column out of it

我认为我可以进行子选择,将正确的表单插入新列

UPDATE #silverpop_header
SET MARKET_AREA = a.template_name
FROM  #silverpop_header pop
join dw.f_CRM a
ON   pop.template_name = a.TEMPLATE_NAME
left join (
select 
RIGHT(RTRIM(Template_name), 2) country
from dw.f_CRM )

但我认为我在某种程度上做错了

2 个答案:

答案 0 :(得分:1)

但主要问题是我如何在表格中插入template_name并仅将国家/地区首字母添加到新列。

请根据上述评论找到以下脚本执行操作:

update silverpop_header set MARKET_AREA = (Select RIGHT(RTRIM(Template_name), 2) country from silverpop_header a where a.TEMPLATE_NAME = 'Party_package_US');

这将更新Party_package_US模板的记录。如果要对所有模板执行,则必须编写一个简单的游标来读取所有template_name并为每个模板执行相同的更新查询。

如果需要,请更新我。

找到为SQLServer编写的光标。

DECLARE @TAMPLATENAME VARCHAR(100), @SQL VARCHAR(500), @quotes varchar(4)
DECLARE UPDATE_COUNTRIES CURSOR FOR SELECT TEMPLATE_NAME FROM silverpop_header
set @quotes = '''';
OPEN UPDATE_COUNTRIES
FETCH NEXT FROM UPDATE_COUNTRIES INTO @TAMPLATENAME
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'update silverpop_header set MARKET_AREA = (Select RIGHT(RTRIM(Template_name), 2) country from silverpop_header a where a.TEMPLATE_NAME = '+@quotes+@TAMPLATENAME+@quotes+' ) where TEMPLATE_NAME = '+@quotes+@TAMPLATENAME+@quotes
print(@SQL)
EXEC(@SQL)
FETCH NEXT FROM UPDATE_COUNTRIES INTO @TAMPLATENAME
END
CLOSE UPDATE_COUNTRIES
DEALLOCATE UPDATE_COUNTRIES

答案 1 :(得分:0)

最终结果如下:

update #temp_table
    set veerg2 = RIGHT(RTRIM(nimi), 3)  
    from #temp_table a 
    where a.nimi is not NULL ;

只需在SET部分切出选择就可以了解