SELECT *
FROM bd2_zbiorcza
WHERE
NOT (imie like '%a')
AND plec = 'K';
有人可以告诉我这个查询我在做什么吗?
我想要imie
不以'a'结尾的行。我在做什么错了?
答案 0 :(得分:2)
您的查询应该可以使用
测试数据:
CREATE TABLE test_data ( imie, plek ) AS
SELECT 'aaa', 'K' FROM DUAL UNION ALL
SELECT 'bbb', 'K' FROM DUAL UNION ALL
SELECT 'cba', 'K' FROM DUAL UNION ALL
SELECT 'ddd', 'K' FROM DUAL;
查询
您可以使用:
SELECT *
FROM test_data
WHERE NOT( imie LIKE '%a' ) AND plek = 'K'
或者,不带方括号:
SELECT *
FROM test_data
WHERE NOT imie LIKE '%a' AND plek = 'K'
或使用NOT LIKE
:
SELECT *
FROM test_data
WHERE imie NOT LIKE '%a' AND plek = 'K'
输出:
它们全部输出:
IMIE | PLEK :--- | :--- bbb | K ddd | K
db <>提琴here
可能出什么问题了
a
(由于您发布的是图片而不是文字,因此不明显)。CHAR
列(已用空格右填充)中,而不是存储在可变大小的VARCHAR2
列中。例如:db<>fiddle。答案 1 :(得分:0)
有时,文字后面有不可见的字符。 F.e.空格,制表符,换行符,...
大多数时候它只是空格。
但是,当您使用“不喜欢”过滤时,可以修剪掉这些尾随空格。
例如,使用RTRIM函数。
SELECT *
FROM bd2_zbiorcza
WHERE RTRIM(imie) NOT LIKE '%a'
AND plec = 'K';
如果不仅仅是空格,则可以使用正则表达式。
SELECT *
FROM bd2_zbiorcza
WHERE NOT REGEXP_LIKE(imie, 'a\s*$')
AND plec = 'K';
答案 2 :(得分:0)
使用正则表达式:
SELECT *
FROM bd2_zbiorcza
WHERE
not regexp_like(lower(imei), '.+a$')
AND plec = 'K';