Oracle SQL如何基于同表另一列的值实现字符串拼接?
在SQL中基于同表同一行列进行字符串拼接的实现方法
当然可以实现!在SQL里,基于同表同一行的不同列进行字符串拼接来生成新内容是很常见的需求,不同数据库系统有对应的语法,我结合你的示例表给你详细说明:
示例表结构
先明确你的原表(假设表名为locations):
CREATE TABLE locations ( STATE VARCHAR(50), CITY VARCHAR(50), Region VARCHAR(20) ); INSERT INTO locations VALUES ('Georgia', 'Atlanta', 'East'), ('Los Angeles', 'California', 'West');
1. 临时查询时生成拼接列(不修改原表)
如果你只是想在查询结果中看到拼接后的列,不需要修改原表结构,可以用以下方式:
MySQL/MariaDB 语法
使用CONCAT()函数:
SELECT STATE, CITY, Region, CONCAT(STATE, ', ', CITY, ' (', Region, ')') AS Location_Desc FROM locations;
执行后结果会新增Location_Desc列,内容类似Georgia, Atlanta (East)。
PostgreSQL 语法
可以用||拼接符或者CONCAT()函数:
-- 方式1:使用|| SELECT STATE, CITY, Region, STATE || ', ' || CITY || ' (' || Region || ')' AS Location_Desc FROM locations; -- 方式2:使用CONCAT() SELECT STATE, CITY, Region, CONCAT(STATE, ', ', CITY, ' (', Region, ')') AS Location_Desc FROM locations;
SQL Server 语法
支持+拼接符或者CONCAT()函数(注意:+拼接时如果有NULL值会返回NULL,CONCAT()会自动处理NULL为空白):
-- 方式1:使用+ SELECT STATE, CITY, Region, STATE + ', ' + CITY + ' (' + Region + ')' AS Location_Desc FROM locations; -- 方式2:使用CONCAT()(推荐,自动处理NULL) SELECT STATE, CITY, Region, CONCAT(STATE, ', ', CITY, ' (', Region, ')') AS Location_Desc FROM locations;
Oracle 语法
使用||拼接符或者CONCAT()函数:
-- 方式1:使用|| SELECT STATE, CITY, Region, STATE || ', ' || CITY || ' (' || Region || ')' AS Location_Desc FROM locations; -- 方式2:使用CONCAT()(仅支持两个参数,多列需要嵌套) SELECT STATE, CITY, Region, CONCAT(CONCAT(CONCAT(STATE, ', '), CITY), CONCAT(' (', Region, ')')) AS Location_Desc FROM locations;
2. 永久新增拼接列到原表
如果需要把拼接后的列永久添加到表中,可以使用ALTER TABLE语句,推荐用生成列,它会自动根据原列的变化更新拼接内容,无需手动维护:
MySQL/MariaDB 示例
ALTER TABLE locations ADD COLUMN Location_Desc VARCHAR(100) GENERATED ALWAYS AS (CONCAT(STATE, ', ', CITY, ' (', Region, ')')) STORED;
PostgreSQL 示例
ALTER TABLE locations ADD COLUMN Location_Desc VARCHAR(100) GENERATED ALWAYS AS (STATE || ', ' || CITY || ' (' || Region || ')') STORED;
SQL Server 示例
ALTER TABLE locations ADD Location_Desc AS (CONCAT(STATE, ', ', CITY, ' (', Region, ')')) PERSISTED;
Oracle 示例
ALTER TABLE locations ADD Location_Desc VARCHAR2(100) GENERATED ALWAYS AS (STATE || ', ' || CITY || ' (' || Region || ')') VIRTUAL;
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

