【发布时间】:2023-03-06 05:14:02
【问题描述】:
我收到此错误消息:-
将 nvarchar 值 '50AB' 转换为数据类型 int 时转换失败
在 SQL Server 2008 中运行以下查询时:
select
max(cast(substring(c.customername, 12, 4) as integer))
from customers c
请帮助我了解可用于解决此问题的转换类型。我已经尝试过使用Convert,但我仍然遇到同样的问题。
【问题讨论】:
-
那是因为你不能像这样把字母转换成数字。您必须删除字母或以某种方式将它们转换为数字。
-
是的,但看起来在 sql server 2012 中我们可以使用 try_cast 来摆脱它..我们有 sql server 2008 的类似功能吗?
-
否-
TRY_CAST是 SQL Server 2012 中的一个新功能 - 如果您需要,您有升级到 2012(或更新) -
try_cast 会因文本字符串而失败并返回 NULL。如果要转换为数字,则需要删除文本值。想一想,什么数字相当于'A'? SQL Server 是如何知道这一点的?
-
@TabAlleman 这是一个公平的观点。我发布了一个答案,当它不可转换时返回 null。
标签: sql-server sql-server-2008 type-conversion aggregate-functions