SQL не запрашивает текстовые данные - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь запросить число и строку в таблице, но это просто не работает. Я знаю, это простой вопрос, но я все еще новичок в 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 голосов
/ 08 ноября 2018

Ясно, что «да» не то, что вы думаете. Я бы начал с попыток получить совпадение:

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 для удаления таких символов из строки.

0 голосов
/ 08 ноября 2018

Если вы получаете это:

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' 

или это:

SELECT `sample_id`, `question_id`, `answer`
FROM `question_answer`
WHERE `question_id` = 1 AND `answer` = 'Yes' 
0 голосов
/ 08 ноября 2018

Вы можете использовать функцию 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...