使用多个别名列时将数据类型 varchar 转换为数字时出错
Error converting data type varchar to numeric when using several alias columns
我有一个 table,其中包含 5 个已定义的列(id、colA、colB、colC、colD),除了 id
.
外,所有列的数据类型均为 decimal(18, 3)
SELECT
[id],
[colA], [colB], [colC], [colD],
colA - colB as length,
colC - colD * 2 as width,
colA + width - length as colMod0
FROM
[dbo].[main]
ORDER BY
_main.id;
当我执行这段代码时,出现错误
Error converting data type varchar to numeric
我试过投射和转换但没有成功。 Length, width 和 colMod0 都是别名列。
错误消息与类型无关。相反,它只是告诉您不能在同一级别的 select 语句中重复使用别名。一种解决方案是重复 width
和 length
:
的表达式
SELECT [id], [colA], [colB], [colC], [colD],
colA-colB AS length,
colC-colD*2 AS width,
colA + (colC-colD*2) - (colA-colB) AS colMod0
FROM [dbo].[main]
ORDER BY _main.id;
另一种方法是将您当前的查询放入 CTE,然后对其进行子查询以使用别名:
WITH cte AS (
SELECT [id], [colA], [colB], [colC], [colD],
colA-colB AS length,
colC-colD*2 AS width
FROM [dbo].[main]
)
SELECT [id], [colA], [colB], [colC], [colD], length, width,
colA + width - length as colMod0
FROM cte
ORDER BY _main.id;
我有一个 table,其中包含 5 个已定义的列(id、colA、colB、colC、colD),除了 id
.
decimal(18, 3)
SELECT
[id],
[colA], [colB], [colC], [colD],
colA - colB as length,
colC - colD * 2 as width,
colA + width - length as colMod0
FROM
[dbo].[main]
ORDER BY
_main.id;
当我执行这段代码时,出现错误
Error converting data type varchar to numeric
我试过投射和转换但没有成功。 Length, width 和 colMod0 都是别名列。
错误消息与类型无关。相反,它只是告诉您不能在同一级别的 select 语句中重复使用别名。一种解决方案是重复 width
和 length
:
SELECT [id], [colA], [colB], [colC], [colD],
colA-colB AS length,
colC-colD*2 AS width,
colA + (colC-colD*2) - (colA-colB) AS colMod0
FROM [dbo].[main]
ORDER BY _main.id;
另一种方法是将您当前的查询放入 CTE,然后对其进行子查询以使用别名:
WITH cte AS (
SELECT [id], [colA], [colB], [colC], [colD],
colA-colB AS length,
colC-colD*2 AS width
FROM [dbo].[main]
)
SELECT [id], [colA], [colB], [colC], [colD], length, width,
colA + width - length as colMod0
FROM cte
ORDER BY _main.id;