我正在尝试查询表中的数字和字符串,但是它不起作用。我知道这是一个简单的问题,但是我还是SQL的新手,我只是看不出查询的问题所在。
这是桌子:
CREATE TABLE question_answer(
sample_id VARCHAR(10),
question_id INT,
question VARCHAR(255),
answer VARCHAR(20)
);
数据如下:
sample_id question_id answer
001 1 Yes
002 1 No
003 1 Yes
...
和我的查询:
SELECT sample_id, question_id, answer
FROM question_answer
WHERE question_id = 1 AND answer = 'Yes'
;
当我请求question_id时,我可以正常工作,但是答案字段不起作用。谢谢!
答案 0 :(得分:3)
很明显,“是”不是您想的那样。我首先尝试完全匹配:
WHERE question_id = 1 AND answer LIKE '%Yes%'
如果这不起作用,则:
WHERE question_id = 1 AND answer LIKE '%Y%e%s%'
一旦找到比赛,就可以尝试找出问题所在。这是三个常见问题:
可惜,MySQL没有regexp_replace()
。如果这只是一个字符,则可以找到它。例如,如果它在字符串的开头:
select @char := left(answer, 1)
from question_answer
where answer regexp '^[^a-zA-Z0-9 ]')
limit 1;
这会将@char
设置为字符的值。您可以在update
中使用它来从字符串中删除此类字符。
答案 1 :(得分:0)
您可以使用trim
函数删除字符串类型列的尾随空格:
SELECT sample_id, question_id, answer
FROM question_answer
WHERE question_id = 1 AND trim(answer) = 'Yes' ;
此外,针对区分大小写的问题,您可以使用
WHERE question_id = 1 AND lower(trim(answer))='yes'
答案 2 :(得分:0)
如果您得到此提示:
[{
_id: ObjectId("b1"),
name: "Fight Club",
author: [{ _id: ObjectId("a1"), name: "Chuck Palahniuk" }] // why an array?
}, ...]
然后,您可能将列名放在这样的引号中:
sample_id question_id answer
鉴于此,您应该这样做:
SELECT 'sample_id', 'question_id', 'answer'
FROM question_answer
WHERE question_id = 1 AND answer = 'Yes'
或者这个:
SELECT sample_id, question_id, answer
FROM question_answer
WHERE question_id = 1 AND answer = 'Yes'