2014-09-06 73 views
4

我想选择所有字段,其中一个字段= XMySQL的选择,其中VARCHAR长度

目标的长度,看是否有字段有15个字符(VARCHAR),并设置类型= Y

当我测试select我得到0行,这是不正确的。

select * 
from payment_options 
where char_length(cc_type) = 15 

我试过长度,char_length等,但没有任何工作。

任何人都可以在正确的方向引导我吗?

谢谢。

编辑:澄清。

我得到了它=(我指定了错误的领域。

我希望做的是设置CC_TYPE以美国运通如果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 2014-09-06 20:55:24

+0

请提供一些样品数据和所需的结果。这将有助于明确目标。 – VMai 2014-09-06 21:13:02

回答

6

你有什么应该工作。也许你需要详细说明“无效”:空结果集?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逻辑中,你可以使用IFIF() docsrelated 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 2014-09-07 11:16:59