我对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来存储是否为十进制
那么,上面的描述是否适合某种数据类型?如果没有,格式化是我想要做的唯一方法吗?
感谢您的帮助
答案 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,但是我猜测这是针对输出的格式,而不是逻辑上的评估。无论如何希望这会有所帮助:)