gpt4 book ai didi

sql-server - T-SQL : Converting NTEXT to VARCHAR to INT/BIGINT

转载 作者:行者123 更新时间:2023-12-02 23:38:42 26 4
gpt4 key购买 nike

我有一个带有NTEXT类型字段的表,它存储许多类型的值,其中包括文件大小。我正在尝试对记录列表运行查询并添加文件大小,但遇到了这个令人困惑的问题。

由于 NTEXT 无法直接/隐式转换为 INTBIGINT,因此我首先将其转换为 VARCHAR 然后我尝试将其转换为 INT 或 BIGINT。一切都很顺利,直到我尝试将 VARCHAR 值转换为 INTBIGINT

这是我的查询和结果:

首先我尝试以下操作,没有显示任何问题,输出为 61069(值仍为 ntext 类型)。

SELECT FileSize
FROM dbo.myTable
WHERE ID = 111

现在我将其转换/转换为 varchar,再次没有问题。输出为 61069(现在为 varchar 类型)。

SELECT CONVERT(VARCHAR, FileSize)
FROM dbo.myTable
WHERE ID = 111

最后,我尝试将 VARCHAR 值转换为 BIGINT,以便可以进行 SUM() 和其他计算,但这次我收到“将数据类型 varchar 转换为 bigint 时出错。”消息。

SELECT CONVERT(BIGINT, CONVERT(VARCHAR, FileSize))
FROM dbo.myTable
WHERE ID = 111

如果我尝试将其转换为 INT,则会收到“将 varchar 值 '7/1/2008 3:39:30 AM' 转换为数据类型 int 时转换失败

SELECT CONVERT(INT, CONVERT(VARCHAR, FileSize))
FROM dbo.myTable
WHERE ID = 111

我完全迷失了,有什么想法可能导致这种情况吗?

最佳答案

您无法控制 where 子句和转换的应用顺序。在某些情况下,SQL Server 将尝试对未通过过滤器的行执行转换 - 一切都取决于计划。试试这个:

SELECT CASE WHEN ID = 111 THEN 
CONVERT(INT, CONVERT(VARCHAR(12), FileSize))
-- don't be lazy, size ------^^ is important
END
FROM dbo.myTable
WHERE ID = 111;

还可以考虑使用整数列来存储整数。这样,您就不会在 FileSize 列中出现像 '7/1/2008 3:39:30 AM' 这样的愚蠢废话。

关于sql-server - T-SQL : Converting NTEXT to VARCHAR to INT/BIGINT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14815760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com