2014-09-06 2 views
4

Я пытаюсь выбрать все поля, где длина поля = XMySQL выбрать, где длина VARCHAR

Цель состоит в том, чтобы увидеть, если поле имеет 15 символов (VARCHAR) и установить тип = Y

Когда я тестирую select, я возвращаю 0 строк, что неверно.

select * 
from payment_options 
where char_length(cc_type) = 15 

Я пробовал длину, char_length и т. Д., Но ничего не работает.

Может ли кто-нибудь вести меня в правильном направлении, пожалуйста?

Thank you.

Редактировать: для уточнения.

Я получил это = (я указание неправильного поля.

То, что я хотел сделать, это установить cc_type в Amex если char_length (cc_masked) = 15

UPDATE payment_options 
SET cc_type = "Amex" 
WHERE char_length(cc_masked) = 15; 
+3

'char_length' должен работать. Попробуйте запустить 'SELECT CHAR_LENGTH (cc_type) FROM payment_options;', чтобы увидеть, какие значения он может вернуть. – gandaliter

+0

Просьба предоставить некоторые данные образца и желаемый результат. Это поможет сделать цель понятной. – VMai

ответ

6

То, что вы должны работать. Возможно, вам нужно уточнить, что «ничего не работает»: пустой набор результатов? Sql error? Что? Вы также должны указать свою схему и данные образца.

Несмотря ни на что, я пошел вперед и создал скрипт sql, работы: http://sqlfiddle.com/#!2/7242e/8

схемы и выборки данных

CREATE TABLE `payment_options` (
    `id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 
    `cc_type` VARCHAR(255), 
    `cc_name` VARCHAR(255) 
); 

INSERT INTO `payment_options` (`cc_type`,`cc_name`) VALUES 
    ('fifteen chars01','alpha'), 
    ('fifteen chars02','bravo'), 
    ('not fifteen chars','charlie'), 
    ('fifteen chars03','delta'), 
    ('really not 15 chars','echo'); 

Ваш существующий запрос

SELECT * 
FROM `payment_options` 
WHERE CHAR_LENGTH(`cc_type`) = 15; 

Предоставляет следующий результирующий набор:

|--------------------------------------| 
| ID | CC_TYPE   | CC_NAME | 
| 1 | fifteen chars01 | alpha | 
| 2 | fifteen chars02 | bravo | 
| 4 | fifteen chars03 | delta | 
|--------------------------------------| 

Если вы хотите запустить X/Y в самом запросе, вы могли бы использовать IF (IF() docs, related SO answer):

SELECT *, 
    IF(CHAR_LENGTH(`cc_type`)=15,'Y','X') as `cc_type_modified` 
FROM `payment_options`; 

Урожайность:

|---------------------------------------------------------------| 
| ID | CC_TYPE    | CC_NAME | CC_TYPE_MODIFIED | 
| 1 | fifteen chars01  | alpha | Y     | 
| 2 | fifteen chars02  | bravo | Y     | 
| 3 | not fifteen chars | charlie | X     | 
| 4 | fifteen chars03  | delta | Y     | 
| 5 | really not 15 chars | echo  | X     | 
|---------------------------------------------------------------| 
+1

Спасибо. Я действительно решил свою проблему, но ваш подробный ответ заслуживает того, чтобы быть отмеченным как ответ. – Bardworx

Смежные вопросы