LIKE是将列值与另一列值或带引号的字符串进行比较的标准运算符。
我想排除地址列中以字母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(?
"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)
。。