【问题标题】:MySQL select where varchar lengthMySQL select where varchar length
【发布时间】:2014-10-31 12:18:44
【问题描述】:

我正在尝试选择字段长度 = X 的所有字段

目标是查看一个字段是否有15个字符(VARCHAR)并设置type=Y

当我测试 select 时,我返回 0 行,这是不正确的。

select *
from payment_options
where char_length(cc_type) = 15

我尝试了长度、char_length 等,但没有任何效果。

请谁能指导我正确的方向?

谢谢。

编辑:澄清。

我知道了 =( 我指定了错误的字段。

如果 char_length(cc_masked) = 15,我想做的是 SET cc_type to Amex

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

【问题讨论】:

  • char_length 应该可以工作。尝试运行 SELECT CHAR_LENGTH(cc_type) FROM payment_options; 以查看它可能返回的值。
  • 请提供一些样本数据和想要的结果。这将有助于明确目标。

标签: mysql select varchar


【解决方案1】:

你所拥有的应该可以工作。也许您需要详细说明“没有任何效果”:空结果集? 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() 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                 |
|---------------------------------------------------------------|

【讨论】:

  • 谢谢。我实际上解决了我的问题,但您的详细回复值得标记为答案。
猜你喜欢
  • 1970-01-01
  • 2013-01-03
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
相关资源
最近更新 更多