如何从 varchar 列中获取新的列数据
How to get new column data from varchar column
我得到了帮助以获取 select 查询以获取正确的数据,但是如何将其插入 table。
正在关注
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 的 table 并仅将国家/地区首字母添加到新列中。
Link 对于我在何处获得帮助的较早问题:how to get info from VARCHAR column and create new column out of it
我想我可以做 subselect 将正确的表格插入新列
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 )
但我想我不知何故做错了
但主要问题是如何将 table 插入到存在 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
最终的效果如下:
update #temp_table
set veerg2 = RIGHT(RTRIM(nimi), 3)
from #temp_table a
where a.nimi is not NULL ;
只需删除 SET 部分的 select 就可以了
我得到了帮助以获取 select 查询以获取正确的数据,但是如何将其插入 table。
正在关注
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 的 table 并仅将国家/地区首字母添加到新列中。
Link 对于我在何处获得帮助的较早问题:how to get info from VARCHAR column and create new column out of it
我想我可以做 subselect 将正确的表格插入新列
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 )
但我想我不知何故做错了
但主要问题是如何将 table 插入到存在 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
最终的效果如下:
update #temp_table
set veerg2 = RIGHT(RTRIM(nimi), 3)
from #temp_table a
where a.nimi is not NULL ;
只需删除 SET 部分的 select 就可以了