【发布时间】:2021-02-17 14:09:38
【问题描述】:
我正在使用 Microsoft SQL Express 和 SQL Server Management Studio。
我正在按照教程从头开始创建一个小表,并按照以下代码输入一些值。本教程正在教授如何正确转换列,如果错误地首先声明它。
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');
“费用”列错误地创建为文本。我正在尝试在使用以下代码时将此列类型转换为整数。但这给出了以下错误。有什么建议吗?
SELECT transaction_date, amount + CAST (fee AS integer) AS net_amount
FROM transactions;
Explicit conversion from data type text to int is not allowed.
【问题讨论】:
-
你为什么首先使用
text?它已被弃用 16 年。 -
此外,如果您正在以字符串类型的数据类型存储数据,那么您根据定义声明您不想对所述数据执行聚合或数学运算。您在这里有 2 个设计缺陷: 1. 您使用的数据类型 (
text) 在 16 年前就应该停止使用。 2. 您正在存储您希望将其视为字符串类型数据类型中的数值的数值数据。修复您的设计,从数字数据类型开始。 -
@Larnu, :) 我刚开始学习 SQL。教程是这样说的……那么我猜我的教程有误。无论如何,假设它是一个字符串列,关于如何避免错误的任何建议?
-
为什么要使用字符串类型的数据类型来存储“费用”?正如我所说,如果你想对一个值执行数学运算,那么不要将它存储为字符串类型的值;使用
int、decimal或numeric开始。修复您的设计,问题不存在。 -
另外,如果您正在关注的本教程真的告诉您使用
text存储“费用”,那么我建议您现在停止关注;由于很多原因,这绝对是一个糟糕的建议。找到一个更好的。教程应该告诉您将货币值存储在字符串数据类型中(或更糟的是text),只有一个原因;展示一个想法的灾难性。
标签: sql-server sql-server-express