添加约束以防止表中的NaN

时间:2018-05-03 17:02:29

标签: postgresql constraints nan

我有一个当前格式为myVar的圆柱。这应该只是一个实际的数字。我可以添加什么样的约束来阻止var result = query<Items>() .Where(x => x.Id == someId) .SelectMany(x => x.SubItems) .GroupBy(x => x.SubItemId) .Select(x => new ItemModel { SubItemId = x.Key, SpecialItemCount = x.Where(y => y.IsSpecial == false).Count(), }) .ToList()... 成为NaN?

1 个答案:

答案 0 :(得分:6)

通常你需要一个特殊的函数来检测一个值是否为NaN(类似于对SQL的is null进行is not nullnull测试)但是在PostgreSQL中NaN = NaN is true

  

[...]为了允许在基于树的索引中对数值进行排序和使用,PostgreSQL将NaN值视为相等,并且大于所有非NaN值。< / p>

因此,直接比较的简单CHECK约束就足够了:

check (myvar <> 'NaN')

如果您愿意,可以添加演员表,但没有必要:

check (myvar <> 'NaN'::real)
check (myvar <> 'NaN'::numeric)