select * from table_name where serial = '400 TZV 50'
Я знаю, что эта запись существует, но запрос возвращает мне пустой набор.
Например, если у вас есть записи:
SQL Fiddle
Настройка схемы Oracle 11g R2 :
CREATE TABLE table_name ( serial VARCHAR2(64) );
INSERT INTO table_name
SELECT '400 TZV 50' FROM DUAL UNION ALL -- Extra space in middle
SELECT '400 TZV 50 ' FROM DUAL UNION ALL -- Extra space at the end
SELECT '400 TZV 50' || CHR(13) || CHR(10) FROM DUAL UNION ALL -- CR/LF at the end
SELECT '400' || CHR(9) || 'TZV 50' FROM DUAL; -- Tab instead of space
Чтобы найти записи, которые, по вашему мнению, должны совпадать.Вы можете использовать LIKE
:
SELECT serial, '400 TZV 50' AS match
FROM table_name
WHERE serial LIKE '400%TZV%50%'
или REGEXP_LIKE
:
SELECT serial, '400 TZV 50' AS match
FROM table_name
WHERE REGEXP_LIKE( serial, '400\s+TZV\s+50\s*' )
, которые оба выдают:
Results :
| SERIAL | MATCH |
|--------------|------------|
| 400 TZV 50 | 400 TZV 50 |
| 400 TZV 50 | 400 TZV 50 |
| 400 TZV 50 | 400 TZV 50 |
| | |
| 400 TZV 50 | 400 TZV 50 |
, тогда вы можете посмотреть, отличаются ли значения.
Если вы не видите, почему оно не совпадает, используйте функцию DUMP
, чтобы получитьбазовые значения байтов в типах данных:
SELECT DUMP( serial ) AS serial, DUMP( '400 TZV 50' ) AS match
FROM table_name
WHERE REGEXP_LIKE( serial, '400\s+TZV\s+50\s*' )
Какие выходные данные:
Результаты :
| SERIAL | MATCH |
|---------------------------------------------------|----------------------------------------------|
| Typ=1 Len=11: 52,48,48,32,84,90,86,32,32,53,48 | Typ=96 Len=10: 52,48,48,32,84,90,86,32,53,48 |
| Typ=1 Len=11: 52,48,48,32,84,90,86,32,53,48,32 | Typ=96 Len=10: 52,48,48,32,84,90,86,32,53,48 |
| Typ=1 Len=12: 52,48,48,32,84,90,86,32,53,48,13,10 | Typ=96 Len=10: 52,48,48,32,84,90,86,32,53,48 |
| Typ=1 Len=10: 52,48,48,9,84,90,86,32,53,48 | Typ=96 Len=10: 52,48,48,32,84,90,86,32,53,48 |
И вы можете видеть, что значения разные (игнорируйте значение typ
, так как одно является строковым литералом, а другое - VARCHAR2
, хранимое в таблице):
первоедлина строки отличается от дополнительного пробела в середине:
Typ= 1 Len=11: 52,48,48,32,84,90,86,32,32,53,48
Typ=96 Len=10: 52,48,48,32,84,90,86,32,53,48
^^ ^^
вторая длина отличается от дополнительного пробела в конце:
Typ= 1 Len=11: 52,48,48,32,84,90,86,32,53,48,32
Typ=96 Len=10: 52,48,48,32,84,90,86,32,53,48
^^ ^^^
третий имеет длину, отличную от символов CR / LF в конце:
Typ= 1 Len=12: 52,48,48,32,84,90,86,32,53,48,13,10
Typ=96 Len=10: 52,48,48,32,84,90,86,32,53,48
^^ ^^^^^^
, а последняя строка имеет значение ASCII 9 (вкладка)в 4-м символе, когда ASCIIожидается значение 32 (пробел).
Typ= 1 Len=10: 52,48,48,9,84,90,86,32,53,48
Typ=96 Len=10: 52,48,48,32,84,90,86,32,53,48
^^
Как только вы выяснили, почему ваш запрос не совпадает, вы можете адаптировать его либо к фактическим данным, либо, еслиданные неправильно отформатированы, вы можете исправить значения в таблице на ожидаемый формат.