2014-09-06 95 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