当前位置: 首页 > 面试题库 >

SQL-安全地将BIGINT转换为INT

梁丘俊人
2023-03-14
问题内容

我有一个CSV导入到我们的数据库。“列”之一包含
为INT的数据,但某些行的数字仅落在BIGINT范围内(因为它们是来自我们合作伙伴之一的测试数据)。我们在内部存储INT,不希望更改。

我想从BIGINT安全地转换为INT。安全地说,如果发生算术溢出,则不会出现任何错误。如果转换成功,我希望我的脚本继续进行。如果失败,我希望它短路。我似乎无法弄清楚正确的语法。这就是我得到的:

DECLARE @UserIDBigInt BIGINT = 9723021913; -- actually provided by query param
--Setting within the INT range successfully converts
--SET @UserIDBigInt = 5;
DECLARE @UserID INT = CONVERT(INT, @UserIDBigInt);
--DECLARE @UserID INT = CAST(@UserIDBigInt AS INT);
SELECT @UserIDBigInt
SELECT @UserID
IF @UserID IS NOT NULL BEGIN
    SELECT 'Handle it as reliable data'
END

我曾考虑过将@UserIDBigInt与INT的有效范围(-2 ^ 31(-2,147,483,648)到2 ^
31-1(2,147,483,647))进行比较,但是我真的不喜欢这种方法。那是我的后备。我希望可以使用一些语言构造或内置函数。如果我绝对必须比较有效范围,是否至少有一些内置常量(例如C#的int.MinValue和int.MaxValue)?

编辑 :改正错别字。


问题答案:

将它们添加到您的脚本中:

SET ARITHABORT OFF;
SET ARITHIGNORE ON;

这会将所有溢出值转换为NULL。

此处的更多信息:http :
//msdn.microsoft.com/en-
us/library/ms184341.aspx



 类似资料:
  • 问题内容: Java中最惯用的方法是验证从转换long为int不会丢失任何信息? 这是我当前的实现: 问题答案: Java 8已添加了一个新方法来完成此任务。 会抛出一个溢出的情况。 看到: Java 8中已添加了其他几种溢出安全方法,它们的结尾是精确。 例子: Math.incrementExact(long) Math.subtractExact(long, long) Math.decrem

  • 问题内容: 我想将一个表的所有行插入另一个表,并且还希望将一个字段转换为,但是当我使用SQL Server时显示错误: 将数据类型nvarchar转换为bigint时出错 我该如何解决这个问题? 问题答案: 您可以尝试使用以确定确实是数字的那些行: 那将转换那些可以转换的行-其他行需要手动处理。

  • 更多信息: 我有一个hibernate存储库,如下所示- Hibernate以某种方式将(在where子句中)作为,而SAMPLE_TABLE将这个id字段作为,因此会引发类型不匹配问题。 字段在这里定义为long。 Edit-2如果有人得到这样的问题,很可能他在查询中传递了null值。

  • 问题内容: 我有bigInt:我需要将其转换为。 我尝试了几种方法来做到这一点: 和: 当我发现上面的代码与like:一起使用时,通过我的bigInt我收到以下错误: 消息8115 …将表达式转换为数据类型datetime的算术溢出错误。 有谁知道如何解决吗? 问题答案: 以下是一些可以将bigint计算为日期时间的计算。 结果: 稍作改动,这些日期时间就可以被截断或四舍五入。

  • 问题内容: 给定一串JSON数据,如何安全地将该字符串转换为JavaScript对象? 显然,我可以使用类似的方法不安全地执行此操作: 但这使我容易受到包含其他代码的JSON字符串的影响,仅进行评估似乎很危险。 问题答案: 只要您可以保证使用合理的现代浏览器,它就是一种纯JavaScript方法。

  • 问题内容: 给定一串JSON数据,如何安全地将该字符串转换为JavaScript对象? 显然,我可以使用类似的方法不安全地执行此操作: 但这使我容易受到包含其他代码的JSON字符串的影响,仅进行评估似乎很危险。 问题答案: 只要您可以保证使用相当现代的浏览器,它就是一种纯JavaScript方法。