gpt4 book ai didi

sql - 转换数据类型varchar时出错

转载 作者:行者123 更新时间:2023-12-04 13:35:44 24 4
gpt4 key购买 nike

我目前有一个表,其列为varchar。该列可以容纳数字或文本。在某些查询期间,我将其视为bigint列(我在它与另一个表中的列bigint之间进行联接)

只要此字段中只有数字没有问题,但是即使有一行的分钟也有文本而不是该字段中的数字,我都会收到“将数据类型varchar转换为bigint时出错”。即使在WHERE部分中,我也确保所有文本字段都没有出现。

为了解决这个问题,我创建了一个 View ,如下所示:

SELECT     TOP (100) PERCENT ID, CAST(MyCol AS bigint) AS MyCol
FROM MyTable
WHERE (isnumeric(MyCol) = 1)

但是,即使 View 仅显示具有数字值的行并将Mycol强制转换为bigint,但在运行以下查询时,将数据类型varchar转换为bigint仍然会出错:
SELECT * FROM MyView where mycol=1

当对 View 进行查询时,它不应该知道它背后发生了什么!它应该只看到两个bigint字段! ( see attached image,甚至mssql management studio都将 View 字段显示为bigint)

最佳答案

好的。我终于创建了一个有效的 View :

SELECT TOP (100) PERCENT id, CAST(CASE WHEN IsNumeric(MyCol) = 1 THEN MyCol ELSE NULL END AS bigint) AS MyCol
FROM dbo.MyTable
WHERE (MyCol NOT LIKE '%[^0-9]%')

感谢 AdaTheDev CodeByMoonlight 。我用你的两个答案来解决这个问题。 (当然也感谢其他回复者)

现在,当我加入其他bigint col或执行类似“SELECT * FROM MyView where mycol = 1”的操作时,它将返回正确的结果,没有错误。我的猜测是,查询本身中的CAST导致查询优化器无法查看原始表,就像克里斯蒂安·海特(Christian Hayter)所说的那样,可能会与其他 View 一起使用

关于sql - 转换数据类型varchar时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1237784/

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