需要一个将数据存储为Int的DataType,还需要将Decimal存储

时间:2018-11-12 16:40:19

标签: sql mysql-workbench sqldatatypes

我对mysql中的数据类型有些困惑

我有下表:

id (int,primary key),
tipo (varchar(45)),
inteiro_pedaco (varchar(45)),
marca (varchar(45)),
a (decimal(11,1),
b (decimal(11,1),
c (int (11))

A和B列应以以下格式存储数据:00.0、00.1等。

但是,A和B列也应该能够存储数据,就像它是INT一样,不仅是十进制,但是,例如,如果我尝试输入“ 10”,它将自动格式化为“ 10.0”

最大的问题是:这两列(A和B)必须存储10作为值,而其他时候是10.0,即使10.0等于10,也必须完全按照发送的方式存储它,不管是否有小数点。如果输入为10,则必须存储为10;如果输入为10.0,则必须存储为10.0

我知道这听起来很奇怪,但相信我,有时它会以10.0的速度接收数据,我并不是以10.0为例,它将真正以10.0和10的方式接收数据

我尝试阅读有关数据类型的信息,但是除了varchar之外,我找不到满足这些要求的人,但是在这种情况下,我无法使用varchar,而且,我无法创建两个分别的存储数据,它们必须位于同一位置列

我正在考虑将所有内容保存为十进制,然后在进行选择时将它们格式化,但是在那种情况下,我必须创建一个新的colunm来存储是否为十进制

那么,上面的描述是否适合某种数据类型?如果没有,格式化是我想要做的唯一方法吗?

感谢您的帮助

3 个答案:

答案 0 :(得分:0)

如果尾随或前导变量很重要,则应将值存储为字符串。您真的没有太多选择。

基本上,值不是数字,而是某种代码。在数字世界中, function focusLastRole(){ var roleName = document.getElementById("asgned_roleList").getElementsByTagName("OPTION"); for (var i=0;i<roleName.length;i++){ roleName[i].selected="true"; } } function focusFirstRole() { var roleName = document.getElementById("asgned_roleList").getElementsByTagName("OPTION"); var i=0; roleName[i].selected="true"; } function focusNextRole(){ var selectId = document.getElementById("asgned_roleList"); for (var i = 0; i < selectId.options.length; i++) { selectId.options[i][selectId.selectedIndex].setAttribute("selected", "selected"); } }等于 <select id="asgned_roleList" name="userRoles" size="15" > <option>Admin</option> <option>User</option> <option>Super User</option> <option>Super Admin</option> </select> <button onclick="focusLastRole();">Last</button> <button onclick="focusFirstRole();">First</button> <button onclick="focusPreviousRole();">Up</button> <button onclick="focusNextRole();">Down</button>

编辑:

根据您的评论,您应该有两个均为整数的列。一个用于“小数点之前 ”部分,第二个用于范围。

您试图将两件事放在一列中犯了一个错误。

答案 1 :(得分:0)

您可能要考虑有多列。例如DEC_VAL,INT_VAL,STR_VAL

这将解决联接问题和过滤器问题,但维护起来稍难。

答案 2 :(得分:0)

类似的问题是,当您获取数据而不是存储数据时,如果小数点掉了(例如您希望在输出过程中出现某种外观),则可以尝试为case选择一个case语句。

select case when cast(cast(A as int) as decimal) = A then cast(A as int) else A end

我们在这里正在测试是否将A​​列作为int等于A列作为十进制,如果它们相同,则将其强制转换为int。如果它们不相等,我们将A列保留为小数。

正如其他人指出的那样,这是一个奇怪的问题,因为大多数事情将评估1.0 = 1,但是我猜测这是针对输出的格式,而不是逻辑上的评估。无论如何希望这会有所帮助:)