T-SQL 中是否有像其他语言中的常量一样提供数据类型(例如 int)的最大值和最小值范围?
我有一个代码表,其中每行都有一个上限和下限列,我需要一个条目来表示一个范围,其中上限是 int 可以容纳的最大值(有点像黑客无穷大)。我不想对其进行硬编码,而是使用类似
SET UpperRange = int.Max
的内容
有两种选择:
在 Oracle 中,您可以在包中完成此操作 - 最接近的 SQL Server 是程序集...
我认为没有任何已定义的常量,但您可以通过将值存储在表中或使用标量值函数来自行定义它们。
桌子
设置一个包含三列的表:TypeName、Max 和 Min。这样您只需填充它们一次。
标量值函数
或者,您可以使用标量值函数 GetMaxInt() 例如(有关真实示例,请参阅此 StackOverflow 答案。
您可以在此处找到所有最大值/最小值:http://msdn.microsoft.com/en-us/library/ms187752.aspx
像瘟疫一样避免标量函数:
标量 UDF 性能问题
话虽这么说,我不会使用另一个人建议的三列表。
这会在您使用它的几乎所有地方导致隐式转换。
如果您需要将其用于多种类型,您还必须多次加入该表。
相反,为每种数据类型(使用其自己的数据类型定义)的每个最小值和最大值设置一列,并直接调用它们进行比较。
示例:
SELECT *
FROM SomeTable as ST
CROSS JOIN TypeRange as TR
WHERE ST.MyNumber BETWEEN TR.IntMin AND TR.IntMax
在以前的版本中我有时会使用
SELECT 0x7fffffff + 0 /* 2147483647 */
SELECT 0x80000000 + 0 /* -2147483648 */
获取值,因为我记得十六进制模式而不是十进制
SQL Server 2022 支持位移运算符,因此您也可以这样做
SELECT -1 >> 1 /* 2147483647 */
SELECT -1 << 31 /* -2147483648 */