Bar*_*orx 8 mysql select varchar
我正在尝试选择字段长度= X的所有字段
目标是查看字段是否包含15个字符(VARCHAR)和set type = Y.
当我测试select我回来0行,这是不正确的.
select *
from payment_options
where char_length(cc_type) = 15
Run Code Online (Sandbox Code Playgroud)
我尝试了长度,char_length等,但没有任何作用.
有人能指导我正确的方向吗?
谢谢.
编辑:澄清.
我明白了=(我指的是错误的字段.
如果char_length(cc_masked)= 15,我想要做的是将cc_type设置为Amex
UPDATE payment_options
SET cc_type = "Amex"
WHERE char_length(cc_masked) = 15;
Run Code Online (Sandbox Code Playgroud)
zam*_*uts 10
你有什么应该工作.也许你需要详细说明"无效":空结果集?sql错误?什么?您还应该指定架构和示例数据.
无论如何,我继续创建了一个sql fiddle show,这样的东西可能会起作用: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');
Run Code Online (Sandbox Code Playgroud)
您现有的查询
SELECT *
FROM `payment_options`
WHERE CHAR_LENGTH(`cc_type`) = 15;
Run Code Online (Sandbox Code Playgroud)
提供以下结果集:
|--------------------------------------|
| ID | CC_TYPE | CC_NAME |
| 1 | fifteen chars01 | alpha |
| 2 | fifteen chars02 | bravo |
| 4 | fifteen chars03 | delta |
|--------------------------------------|
Run Code Online (Sandbox Code Playgroud)
如果你想在查询本身内运行X/Y逻辑,你可以使用IF(IF()docs,相关的SO答案):
SELECT *,
IF(CHAR_LENGTH(`cc_type`)=15,'Y','X') as `cc_type_modified`
FROM `payment_options`;
Run Code Online (Sandbox Code Playgroud)
产量:
|---------------------------------------------------------------|
| 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 |
|---------------------------------------------------------------|
Run Code Online (Sandbox Code Playgroud)