gpt4 book ai didi

sql - 表示数学范围的最佳数据模型是什么(在数据库、xml、json 中……)?

转载 作者:数据小太阳 更新时间:2023-10-29 02:23:39 26 4
gpt4 key购买 nike

数学范围,例如:

大于或等于 50 且小于 100 (>=50 && < 100)

小于 10 或大于 40 (<10 || >40)

我一直在思考如何在文件和数据库中表示数学范围,范围可能是由非程序员输入的,我需要保持输入简单,但另一方面,它也需要保持输入容易转换成数据,容易查错输入 例如:"<10 || >100"看似最简单,但我很难解析字符串得到数据,还要考虑输入格式错误

我一直在考虑一些输入法,以 >=50 && < 100 为例,它是键值形式:

1.用1个字符串表示整个范围:

<rangeInString>=50 && < 100</rangeInString>

2.分离出2个字符串,一个代表下限,一个代表上限,然后在程序中解析每个字符串:

<lowerBound> >=50 </lowerBound>
<upperBound> <100 </upperBound>

3.上下界分离,符号与数字分离:

<lowerBound>
<sign> >= </sign>
<data>50</data>
</lowerBound>
<upperBound>
<sign> < </sign>
<data>100</data>
</upperBound>

4.下界和上界分开,符号也分开,if包含相等条件的情况也分开:

<lowerBound>
<sign> > </sign>
<isIncludeEqual>true</isIncludeEqual>
<data>50</data>
</lowerBound>
<upperBound>
<sign> < </sign>
<isIncludeEqual>false</isIncludeEqual>
<data>100</data>
</upperBound>

5.使用“&&”或“||”自动检测,例如:>= A with < B,if A < B, must be "&&"e.g.(>= 50 && <100),otherwise is "||"例如(>= 100 || <50):

<A>
<sign> > </sign>
<isIncludeEqual>true</isIncludeEqual>
<data>50</data>
</A>
<B>
<sign> < </sign>
<isIncludeEqual>false</isIncludeEqual>
<data>100</data>
</B>

6.使用字段“isAnd”分隔 >=50 && < 100 (true) 和 <=50 || > 100(假)而不是使用字段符号“<”和“>”:

<lowerBound>
<isIncludeEqual>true</isIncludeEqual>
<data>50</data>
</lowerBound>
<upperBound>
<isIncludeEqual>false</isIncludeEqual>
<data>100</data>
</upperBound>
<isAnd>true</isAnd>

7.其他数据模型...

我需要考虑一些事情:

1.非程序员也能轻松输入

2.易于将数据转换或解析为程序

3.易于检查错误,例如,解析字符串增加了转换数据和检查不正确格式的复杂性,也可能有其他不正确的格式,例如:<=50 && >100 不应该有效,我可能允许使用“&&”或“||”自动检测通过输入符号,但可能会增加代码的复杂度

谁能有想法?

最佳答案

为什么要“编码”呢?使用它没有任何好处或需要,而且有些麻烦。

只存储独占范围结束值

low_end int,
high_end int,

然后您可以将这些原始值转换为 SQL 或应用程序代码中可用的表达式。您不需要考虑包含值,因为“n exclusive”===“n inclusive - 1”适用于低端,“n exclusive”===“n inclusive + 1”适用于高端。

这是一个 SQL 实现:

where (low_end is null or col > low_end)
and (high_end is null or col < high_end)

如果范围结束值需要是 float ,则需要更多:

low_end int,
low_inclusive boolean,
high_end int,
high_inclusive boolean,

还有更多代码:

where (low_end is null or col > low_end + case when low_inclusive then 0 else 1 end)
and (high_end is null or col < high_end - case when high_inclusive then 0 else 1 end)

关于sql - 表示数学范围的最佳数据模型是什么(在数据库、xml、json 中……)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31799786/

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