sql - SQL Server Management Studio 错误转换不存在的字符串
问题描述
我有一个表,其中有一varchar
列具有任何类型的值。我只想过滤数值,而不是将它们与其他数字进行比较。但我总是得到:
将 varchar 值 "!=")" 转换为 int-datatyp 时出错
但是 !=") 甚至不存在于那里
起初我以为它可能在那里,即使数字检查已经失败,也只是检查每个要求。所以我把它放在一个子查询中。但错误仍然发生。
这是我的查询:
SELECT CAST(data AS float)
FROM
(SELECT DISTINCT Data
FROM [dbo].[log]
WHERE [Time]>='2021-08-04 00:00:00.000'
AND ISNUMERIC(data) = 1
AND Data NOT LIKE '%[^(0-9\-\.)]%'
) AS t
WHERE
data > 50
有任何想法吗?
解决方案
您可以使用TRY_CAST
来获取NULL
无效的输入数据 - 而不是异常。ISNUMERIC
众所周知,在判断列值是否真的是数字方面很糟糕 - 或者不是......
SELECT
NumericData
FROM
(SELECT DISTINCT
Data,
NumericData = TRY_CAST(data AS float)
FROM
[dbo].[log]
WHERE
[Time]>='2021-08-04 00:00:00.000'
AND Data NOT LIKE '%[^(0-9\-\.)]%') AS t
WHERE
t.NumericData > 50
您可以使用以下方法找到有问题的数据:
SELECT
data,
NumericData = TRY_CAST(data AS float)
FROM
(SELECT DISTINCT Data
FROM [dbo].[log]
WHERE [Time]>='2021-08-04 00:00:00.000'
AND Data NOT LIKE '%[^(0-9\-\.)]%') AS t
WHERE
TRY_CAST(data AS float) IS NULL
推荐阅读
- html - 链接到同一根文件夹中的新 HTML 页面不起作用
- c# - 授权属性在 JWT 和 asp.net core 2.1 中不起作用
- augmented-reality - 当使用 ARCore 查找平面时出现延迟时,如何使对象放置变得真实?
- c# - Blazor 组件可以在 xml 中作为自然父子级处理吗?
- python - 如何在循环中连接超过 2 个 ndarray(variable)(其中一个是第一个循环中的 EMPTY)
- python - 有没有办法根据使用 pushshift API 的天赋来获取提交或 subreddit?
- javascript - 在Javascript中返回数组中的最大值
- c# - Linq - 检查数组中存在的任何值是否存在于数据库表中
- mysql - 选择具有子模型属性的父模型并销毁它 - sequelize/MySQL
- ios - IOSurfaceClientGetPixelFormat 处的 SIGSEGV(SEGV_ACCERR)