我有一个情况,我有一个表中存储在两个字段中的文件名。这些字段被称为file1和file2。MySQL的条件查询
file1总是存在。对于某些行,file2可能不存在。
我想编写一个查询,使我只能从数据库中获取文件的某个扩展名。
对于我使用例如
...WHERE file1 LIKE '%jpg%'
但在这里我不能使用AND file2 LIKE '%jpg%'
因为文件2可能是空的,这是确定的。
那么我该怎么做才能使LIKE条件只适用于该字段不为空的情况?
我有一个情况,我有一个表中存储在两个字段中的文件名。这些字段被称为file1和file2。MySQL的条件查询
file1总是存在。对于某些行,file2可能不存在。
我想编写一个查询,使我只能从数据库中获取文件的某个扩展名。
对于我使用例如
...WHERE file1 LIKE '%jpg%'
但在这里我不能使用AND file2 LIKE '%jpg%'
因为文件2可能是空的,这是确定的。
那么我该怎么做才能使LIKE条件只适用于该字段不为空的情况?
尝试AND (file2 is NULL or file2 LIKE %jpg%)
看起来你错过了'%jpg%':)附近的引号:) – 2010-07-29 18:21:12
利用括号说明。
WHERE file1 LIKE '%jpg%' AND (file2 LIKE '%jpg%' OR file2 is NULL OR file2 = '')
,或者你从文件2
需要的任何其他条件试试这个:
AND (file2 LIKE '%jpg%' OR file2 IS NULL (or file2 = '' depending on what your empty value is))
SELECT *
FROM files
WHERE file1 LIKE '%jpg' AND
(file2 LIKE '%jpg' OR file2 IS NULL);
测试用例:
CREATE TABLE files (file1 varchar(20), file2 varchar(20));
INSERT INTO files VALUES ('pic1.jpg', NULL);
INSERT INTO files VALUES ('pic2.png', NULL);
INSERT INTO files VALUES ('pic3.jpg', 'otherpic.jpg');
INSERT INTO files VALUES ('pic4.png', 'nopic.jpg');
INSERT INTO files VALUES ('pic5.bmp', 'otherpic.gif');
返回:
+----------+--------------+
| file1 | file2 |
+----------+--------------+
| pic1.jpg | NULL |
| pic3.jpg | otherpic.jpg |
+----------+--------------+
2 rows in set (0.00 sec)
注意,file1中LIKE '%JPG%' 将匹配 'hbjpgx.gif'。除非你绝对肯定不会发生这种情况,否则你可能想让它变成'%.jpg' – Kendrick 2010-07-29 18:07:12