ser*_*ave 5 t-sql sql-server varchar ntext bigint
我有一个表格,其中包含NTEXT类型的字段,它存储了许多类型的值,其中包含文件大小.我正在尝试在记录列表上运行查询并添加文件大小,但我遇到了这个令人困惑的问题.
由于NTEXT不能直接/隐式转换为INT或BIGINT,我首先将其转换为VARCHAR然后我尝试将其转换为INT或BIGINT.一切顺利,直到我尝试将VARCHAR值转换为INT或BIGINT.
以下是我的查询和结果:
首先,我尝试以下操作,显示没有问题,输出为61069(值仍为ntext类型).
SELECT FileSize
FROM dbo.myTable
WHERE ID = 111
Run Code Online (Sandbox Code Playgroud)
现在我将其转换/转换为varchar,再次,没问题.输出是61069(现在是varchar类型).
SELECT CONVERT(VARCHAR, FileSize)
FROM dbo.myTable
WHERE ID = 111
Run Code Online (Sandbox Code Playgroud)
最后,我尝试将VARCHAR值转换为BIGINT,以便我可以执行我的SUM()和其他计算,但这次我得到一个" 将数据类型varchar转换为bigint错误. "消息.
SELECT CONVERT(BIGINT, CONVERT(VARCHAR, FileSize))
FROM dbo.myTable
WHERE ID = 111
Run Code Online (Sandbox Code Playgroud)
如果我尝试将其转换为INT,我会收到" 转换varchar值'7/1/2008 3:39:30 AM'转换为数据类型int "
SELECT CONVERT(INT, CONVERT(VARCHAR, FileSize))
FROM dbo.myTable
WHERE ID = 111
Run Code Online (Sandbox Code Playgroud)
我完全迷失了,任何可能导致这种情况的想法?
您无法控制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;
Run Code Online (Sandbox Code Playgroud)
还可以考虑使用整数列来存储整数.然后你不会FileSize
像列中那样愚蠢的废话'7/1/2008 3:39:30 AM'
.
归档时间: |
|
查看次数: |
15935 次 |
最近记录: |