SQL无法查询文本数据

时间:2018-11-08 19:31:02

标签: mysql sql

我正在尝试查询表中的数字和字符串,但是它不起作用。我知道这是一个简单的问题,但是我还是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时,我可以正常工作,但是答案字段不起作用。谢谢!

3 个答案:

答案 0 :(得分:3)

很明显,“是”不是您想的那样。我首先尝试完全匹配:

WHERE question_id = 1 AND answer LIKE '%Yes%' 

如果这不起作用,则:

WHERE question_id = 1 AND answer LIKE '%Y%e%s%' 

一旦找到比赛,就可以尝试找出问题所在。这是三个常见问题:

  • 尾随/领导空间
  • 类似字符(例如零和大写O)
  • 隐藏字符(通常来自非ASCII字符集)

可惜,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'