我正在尝试从包含DECIMAL值的MySQL
表中选择一行。
我打电话的时候:
SELECT * FROM some_table WHERE submit_time='1386163272.2866' LIMIT 1
正确选择行。但是当我试图让这个选择更加具体时:
SELECT * FROM some_table WHERE submit_time='1386163272.2866' AND field_name='stan' LIMIT 1
它不会返回任何结果。
submit_time
字段为DECIMAL(16,4)
,field_name
为VARCHAR
。当然有一行具有submit_time / field_name值的组合(我通过phpmyadmin检查)
我哪里出错了?
修改
查询:
SELECT * FROM some_table WHERE field_name='stan'
也会返回一行。
使用Vincent's suggestion以下查询:
SELECT * FROM some_table WHERE submit_time='1386163272.2866' AND field_name LIKE '%stan%' LIMIT 1
返回了我想要的行,但我现在想要更新此行中的一些值,所以我正在尝试以下查询:
UPDATE some_table SET field_value='1' WHERE submit_time='1386163272.2866' AND field_name LIKE '%stan%' LIMIT 1
但它说“没有受影响的行”。
解
好的,当我从'
查询中删除WHERE
时,它就可以了:
UPDATE some_table SET field_value='1' WHERE submit_time=1386163272.2866 AND field_name LIKE '%stan%' LIMIT 1
答案 0 :(得分:1)
尝试替换
field_name='stan'
到
field_name LIKE '%stan%'
确定'field_name'字段中是否有空格。然后从那里修复它。
答案 1 :(得分:1)
如果submit_time是双数据类型,那么你应该选择它作为像这样的双重类型
SELECT * FROM some_table WHERE submit_time=1386163272.2866
而不像你正在做的varchar / char(MYSQL的隐式类型转换是令人讨厌的,如果MySQL不能使用索引,这个“功能”将花费你的性能,因为这个) 下面的查询并不是您想要使用的
SELECT * FROM some_table WHERE submit_time='1386163272.2866'
您的空白问题(更新表中的所有field_value列)
UPDATE some_table SET field_value = TRIM(field_value);