如何在mariadb中选择以几个字母开头的字符串



我想排除地址列中以字母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做这件事的正确方法是什么(如果不使用regex(?

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)。。

最新更新