SQL Server T-SQL 中的整数最大值常量?

问题描述 投票:0回答:4

T-SQL 中是否有像其他语言中的常量一样提供数据类型(例如 int)的最大值和最小值范围?

我有一个代码表,其中每行都有一个上限和下限列,我需要一个条目来表示一个范围,其中上限是 int 可以容纳的最大值(有点像黑客无穷大)。我不想对其进行硬编码,而是使用类似

SET UpperRange = int.Max

的内容
sql sql-server sql-server-2005 tsql
4个回答
13
投票

有两种选择:

  • 用户定义的标量函数
  • 属性表

在 Oracle 中,您可以在包中完成此操作 - 最接近的 SQL Server 是程序集...


9
投票

我认为没有任何已定义的常量,但您可以通过将值存储在表中或使用标量值函数来自行定义它们。

桌子

设置一个包含三列的表:TypeName、Max 和 Min。这样您只需填充它们一次。

标量值函数

或者,您可以使用标量值函数 GetMaxInt() 例如(有关真实示例,请参阅此 StackOverflow 答案

您可以在此处找到所有最大值/最小值:http://msdn.microsoft.com/en-us/library/ms187752.aspx


3
投票

像瘟疫一样避免标量函数:
标量 UDF 性能问题

话虽这么说,我不会使用另一个人建议的三列表。
这会在您使用它的几乎所有地方导致隐式转换。
如果您需要将其用于多种类型,您还必须多次加入该表。

相反,为每种数据类型(使用其自己的数据类型定义)的每个最小值和最大值设置一列,并直接调用它们进行比较。

示例:

SELECT *
  FROM SomeTable as ST
  CROSS JOIN TypeRange as TR
  WHERE ST.MyNumber BETWEEN TR.IntMin  AND TR.IntMax

0
投票

在以前的版本中我有时会使用

SELECT 0x7fffffff + 0         /*  2147483647 */
SELECT 0x80000000 + 0         /* -2147483648 */

获取值,因为我记得十六进制模式而不是十进制

SQL Server 2022 支持位移运算符,因此您也可以这样做

SELECT -1 >> 1          /*  2147483647 */
SELECT -1 << 31         /* -2147483648 */
© www.soinside.com 2019 - 2024. All rights reserved.