【发布时间】:2016-04-11 07:38:13
【问题描述】:
我对 SQL 服务器中的 ISNUMERIC 函数有疑问。
我有一个表,其中包含一个 nvarchar 类型的列。在本专栏中,我有这样的值 123、241、...,有时还有像 LK 这样的字符串值
我的查询:
WITH CTE AS (
SELECT *
FROM MyTable
WHERE ISNUMERIC([Column1]) = 1
)
SELECT *
FROM CTE
WHERE CAST(cte.Column1 AS INT) > 8000
但此查询返回此错误消息:
error converting data type nvarchar 'LK' to int
我的期望是,公用表表达式过滤所有行,其中 Column1 是数字而不是字符串?对吗?
为什么我会收到此错误?
【问题讨论】:
-
这与 SQL Server 解析和执行 SQL 的顺序有关。如果您想确定,您将不得不使用临时表而不是 CTE。或者根据您的服务器版本,如果您可以访问它们,请尝试解析函数。但是请注意,ISNUMERIC 可以为您无法解析为 INT 的内容返回 1,因此您的代码在其他地方也会失败
-
SQL server 中是否有替代功能可以解决我的问题?
-
您使用的是哪个版本的 SQL Server?
-
Microsoft SQL Server 2014 - 12.0.4213.0 (X64) 2015 年 6 月 9 日 12:06:16 版权所有 (c) Microsoft Corporation Enterprise Edition:Windows NT 6.3 上基于内核的许可(64 位) (Build 9600: ) (Hypervisor)
-
查看 TRY_CONVERT msdn.microsoft.com/en-us/library/hh230993.aspx
标签: sql sql-server sql-server-2014