我有一个数据库,其中一个字段用于int* buf[20];//type of element is int*
,用户通常输入bathrooms
或1
或有时3
,这意味着1个完整的浴室和1个半浴室所以我无法将此字段存储为数字,整数或双精度或小数。我不得不将它们存储为文本。
我的问题是,如果我只想提取那些浴室大于3的记录,我该如何在查询中执行此操作?我正在寻找类似的东西:
1.1
显然SELECT * FROM agentdb WHERE converttointeger(bathrooms) => 3
无效,但有没有办法实现这一目标?我尝试搜索和谷歌搜索,但我一直得到错误的结果或错误的主题。
答案 0 :(得分:1)
不要使用转换为整数的文本。将值存储为带有小数部分的数字,例如decimal
。然后,您可以使用>
比较,而无需进行投射。
我会使用DECIMAL(2,1)
,意思是2位数字,包括1位十进制数字。 " 1.1"将保存为1.1
,而不是1.10
备选方案:您还可以有两个表格字段:full_baths
和half_baths
,每个字段都为tinyint
或smallint
。当您的用户输入" 1.1"在存储之前将其拆分
$baths = $_POST['bathrooms'];// eg: "2.1"
$baths_arr = explode(".",$baths); // eg: [2,1]
$full = $half = 0; //full baths, half baths
if(!empty($baths_arr)):
$full = (int)$baths_arr[0]; //we explicitly convert to integer
$half = empty($baths_arr[1])? 0: (int)$baths_arr[1];
endif;
然后,您可以将$full
和$half
保存在各自的列中
答案 1 :(得分:1)
这应该有效: SELECT * FROM agentdb WHERE CAST(浴室已签名)> = 3
我从这里得到了答案: Cast from VARCHAR to INT - MySQL
答案 2 :(得分:0)
将它们存储为浮点数,以便您可以使用小数,但将它们保留为数字。
答案 3 :(得分:0)
'浴室'数据= {1,3,{3< INT}}
整数只需3或3。 反过来想想! 您不需要'1'数据。 所以......
SELECT * FROM agentdb WHERE bathrooms <> '1'
并且,Casted columnn不是工作索引。