使用CAST函数时如何保留列名?
避免CAST转换后重复写列别名的实用方案
不管用哪种数据库,都有办法减少重复编写别名的麻烦,以下是分场景的解决办法:
SQL Server 场景
如果要转换单列或多列,用CROSS APPLY可以把转换逻辑集中写一次,外层直接引用别名:
SELECT converted.col1 FROM mytab CROSS APPLY (SELECT CAST([col1] AS DECIMAL(12,0)) AS col1) converted
要是需要批量转换大量列,写动态SQL自动生成语句更高效:
DECLARE @sql NVARCHAR(MAX) = '' SELECT @sql += ', CAST([' + name + '] AS DECIMAL(12,0)) AS [' + name + ']' FROM sys.columns WHERE object_id = OBJECT_ID('mytab') AND name IN ('col1', 'col2', 'col3') -- 替换成你要转换的列名 SET @sql = 'SELECT ' + STUFF(@sql, 1, 2, '') + ' FROM mytab' EXEC sp_executesql @sql
MySQL 场景
MySQL里CAST后的简单列转换可以省略AS关键字,少写几个字符:
SELECT CAST(col1 AS DECIMAL(12,0)) col1 FROM mytab
如果你的列原本是字符串类型的数字,还能通过隐式转换省掉CAST:
SELECT col1 + 0 FROM mytab -- 自动转为数值类型,保留原列名
PostgreSQL 场景
PostgreSQL支持更简洁的::转换语法,同样可以省略AS:
SELECT col1::DECIMAL(12,0) col1 FROM mytab
多列转换的话,用CTE把转换逻辑封装起来,后续查询直接复用:
WITH converted_data AS ( SELECT CAST(col1 AS DECIMAL(12,0)) AS col1, CAST(col2 AS DECIMAL(12,0)) AS col2 FROM mytab ) SELECT col1, col2 FROM converted_data
内容的提问来源于stack exchange,提问作者displayName
相关产品推荐
相关产品推荐

