如何在 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
值到一个 int
。 text
已被弃用 16 年,因此您应该 而不是 使用它。它在 2005 年被 varchar(MAX)
取代(以及 nvarchar(MAX)
代表 ntext
和 varbinary(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;
我正在使用 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
值到一个 int
。 text
已被弃用 16 年,因此您应该 而不是 使用它。它在 2005 年被 varchar(MAX)
取代(以及 nvarchar(MAX)
代表 ntext
和 varbinary(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;