MySQL select where varchar length(在MySQL中选择长度为varchar)
MySQL select where varchar length(在MySQL中选择长度为varchar)
我正在尝试选择所有字段,其中字段的长度= X
目标是查看一个字段是否具有15个字符(VARCHAR),并设置类型为Y
当我测试select
时,返回0行,这是不正确的。
select * from payment_options where char_length(cc_type) = 15
我尝试使用length、char_length等,但都不起作用。
有人可以指导我吗?
谢谢。
编辑:澄清。
我明白了 =(我指定了错误的字段。
我想要做的是如果char_length(cc_masked)= 15,则将cc_type设置为Amex
UPDATE payment_options SET cc_type = "Amex" WHERE char_length(cc_masked) = 15;
admin 更改状态以发布 2023年5月21日
你的那个应该是可行的。也许你需要进一步说明什么是“什么也没跑出来”:空的结果集?sql错误?什么情况?你还需要指定你的架构和样本数据。
无论如何,我已经创建了一个SQL Fiddle展示这个问题的解决方法: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()文档,相关的SO答案):
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 | |---------------------------------------------------------------|