【问题标题】:How to select strings beginning with several letters in mariadb?如何在mariadb中选择以多个字母开头的字符串?
【发布时间】:2022-08-24 15:02:22
【问题描述】:

我想排除地址列中以字母 C、G 或 S 开头的字符串。

我试过这个表达,

SELECT * FROM guest_list

WHERE  address NOT LIKE  (\"C%\" OR \"F%\" OR \"G%\");

它给了我这样的警告:

\'Warning: truncated incorrect DOUBLE value: \'C%\'
\'Warning: truncated incorrect DOUBLE value: \'G%\'

这是创建我的表的脚本。

CREATE TABLE `guest_list` (
  `id` int(11) NOT NULL,
  `first_name` varchar(50) DEFAULT NULL,
  `last_name` varchar(50) DEFAULT NULL,
  `address` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

   
INSERT INTO `guest_list` VALUES (1001,\'Jim\',\'Dowd\',\'Lewisham West and Penge\'),
(1002,\'Lyn\',\'Brown\',\'West Ham\'),(1003,\'Ann\',\'Clwyd\',\'Cynon Valley\'),
(1004,\'Nic\',\'Dakin\',\'Scunthorpe\'),(1005,\'Pat\',\'Glass\',\'North West Durham\'),
(1006,\'Kate\',\'Hoey\',\'Vauxhall\'),(1007,\'Mike\',\'Kane\',\'Wythenshawe and Sale East\'),
(1008,\'John\',\'Mann\',\'Bassetlaw\'),(1009,\'Joan\',\'Ryan\',\'Enfield North\'),
(1010,\'Cat\',\'Smith\',\'Lancaster and Fleetwood\'),(1011,\'Mark\',\'Tami\',\'Alyn and Deeside\'),
(1012,\'Keith\',\'Vaz\',\'Leicester East\'),(1013,\'Ian\',\'Austin\',\'Dudley North\'),
(1014,\'Liam\',\'Byrne\',\'Birmingham, Hodge Hill\'),(1015,\'Ann\',\'Coffey\',\'Stockport\');

请用 LIKE 执行此操作的正确方法是什么(如果不使用正则表达式)?

    标签: string mariadb sql-like


    【解决方案1】:

    LIKE 是用于将列值与另一个列值或引用字符串进行比较的标准运算符。

    "C%" OR "F%" OR "G%" 不是带引号的字符串,而是结果为 0 的数学运算,因为所有值都是字符串(但不是数字)值并转换为零。

    您必须使用 n 个 LIKE 运算符,而不是使用一个 LIKE 运算符,其中 n 是您的条件数:

    SELECT columns FROM guest_list
    WHERE address NOT LIKE ("C%") AND address NOT LIKE("F%") AND address NOT LIKE("G%")
    

    默认情况下,LIKE 条件不区分大小写,因此如果您只想过滤大写字母,则必须指定二进制排序规则,例如LIKE ("C%" collate latin1_bin)..

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 2015-08-30
      • 1970-01-01
      • 2021-12-31
      • 2016-10-18
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多