如何从VARCHAR列获取信息并从中创建新列

时间:2016-02-18 08:13:36

标签: sql sybase

我有一个我无法弄清楚的问题。

我的表格中有list template_name, 在每个模板中,它以_US,_EE(也称为国家/地区)结束。 我必须将该部分添加到Country的新列中。

示例数据:

Template_name            Country
Party_package_US         US or USA
PARTY_Package_GB         GB or England
Random_temp_DE           DE or Germany

新列的输出可以只是最后三个字符。

我不知道为了得到这个结果我必须做什么样的查询。

现在好了,我该怎么做才能将结果导入表中的新列?

   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 )

它在Sybase上

2 个答案:

答案 0 :(得分:2)

如果你只需要最后两个字符

SELECT 
SUBSTRING(Template_name,-2) AS 'Country'
FROM TABLE;

编辑: 或者如评论中所述:

SELECT
RIGHT(Template_name,2) AS 'Country'
FROM TABLE;

答案 1 :(得分:0)

处理非2位国家/地区代码的另一种方法。

SELECT Template_name, SUBSTRING_INDEX(Template_name, '_', -1) Country
FROM tbl;

将其作为完整演示。让我发布完整的SQL和输出:

SQL:

-- Data prepraration
create table tbl(template_name varchar(200));
insert into tbl values
('Party_package_US'),
('PARTY_Package_GB'),
('Random_temp_DE');
SELECT * FROM tbl;

-- Needed query
SELECT Template_name, SUBSTRING_INDEX(Template_name, '_', -1) Country
FROM tbl;

输出:

mysql> SELECT * FROM tbl;
+------------------+
| template_name    |
+------------------+
| Party_package_US |
| PARTY_Package_GB |
| Random_temp_DE   |
+------------------+
3 rows in set (0.00 sec)

mysql>
mysql> -- Needed query
mysql> SELECT Template_name, SUBSTRING_INDEX(Template_name, '_', -1) Country
    -> FROM tbl;
+------------------+---------+
| Template_name    | Country |
+------------------+---------+
| Party_package_US | US      |
| PARTY_Package_GB | GB      |
| Random_temp_DE   | DE      |
+------------------+---------+
3 rows in set (0.00 sec)

mysql>
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.8-rc  |
+-----------+
1 row in set (0.00 sec)