如何在 MS SQL Express 中将文本列转换为整数列?

How to cast a text column into integer column in MS SQL Express?

我正在使用 Microsoft SQL Express 和 SQL Server Management Studio。

我正在按照教程从头开始创建一个小 table 并按照以下代码输入一些值。本教程教授如何正确转换一开始就错误声明的列。

CREATE TABLE transactions(
transaction_date date,
amount integer,
fee text
);

SELECT * FROM transactions;

INSERT INTO transactions (transaction_date, amount, fee) 
VALUES ('2018-09-24', 5454, '30');

'fee' 列被错误地创建为文本。我正在尝试使用以下代码将此列转换为整数。但这给出了以下错误。有什么建议吗?

SELECT transaction_date, amount + CAST (fee AS integer) AS net_amount 
FROM transactions;

Explicit conversion from data type text to int is not allowed.

错误在这里告诉你问题;你不能显式(或隐式)convert/cast 一个 text 值到一个 inttext 已被弃用 16 年,因此您应该 而不是 使用它。它在 2005 年被 varchar(MAX) 取代(以及 nvarchar(MAX) 代表 ntextvarbinary(MAX) 代表 image)。

相反,您需要先将值转换为 varchar,然后再转换为 int。我还建议对后者使用 TRY_CONVERT,因为像 '3.0' 这样的值将无法转换:

SELECT TRY_CONVERT(int,CONVERT(varchar(MAX),fee))
FROM dbo.transactions;

当然,您真正应该做的是修复 table:

ALTER TABLE dbo.transactions ADD TextFee varchar(MAX) NULL; --To retain any data that couldn't be converted
GO
UPDATE dbo.transactions
SET fee = TRY_CONVERT(int,CONVERT(varchar(MAX),fee)),
    TextFee = fee;
GO
ALTER TABLE dbo.transactions ALTER COLUMN fee int;