2009-08-13 3 views
4

Я хотел бы, чтобы выбрать все записи, которые имеют символ подчеркивания в их 11-го символа, так я стараюсь это:SQL заявление с LIKE

SELECT * FROM "BOM_SUB_LEVEL" where TOP_CODE like '%%%%%%%%%%_%%%' 

, но это не работает, как ожидалось, может кто-то помочь?

ответ

14

Просто используйте функцию «SUBSTRING»:

SELECT * FROM "BOM_SUB_LEVEL" where SUBSTRING(TOP_CODE, 11, 1) = "_" 

Марк

+1

+1 ты меня светом, я думаю, что это лучший (самый быстрый) вариант. – northpole

+1

+1. Это дает больше смысла, чем целая куча односимвольных подстановок. – JamesMLV

10

Для подстановочных знаков одного символа используется _. Для групповых символов нескольких символов используйте %. Чтобы избежать «реального» внешнего вида _, используйте \_ (спасибо Билл!).

Попробуйте следующий код:

SELECT * FROM "BOM_SUB_LEVEL" where TOP_CODE like '___________\_%' 

доработать следующий комментарий DAV, в обратите внимание, что «%%%» точно так же, как «%», так как по определению «%» охватывает несколько символов.

+0

Чтобы уточнить, почему это работает, и оригинал не делает, шиканы - символ '%' подстановочные является «любое число символов» шаблона - так ''% такая же, как '%%', такая же, как '%%%' и т. д., потому что даже один может соответствовать нескольким символам. – Amber

+0

@ Dav: Я написал свой дополнительный текст, прежде чем вы отправили свой комментарий, не планировал плагиат ... –

+0

"?" не является шаблоном для предикатов LIKE в Pervasive. –

0

% не является на символ подстановки, его начало и конец строки джокера.

т.е., если я хочу, чтобы найти все строки, которые имеют «автомобиль» в них, я хотел бы сделать это:

Select * из MYTABLE где Mycol LIKE «% автомобилей%»

Если бы я хотел только строки, которые начали с автомобилем:

Выберите * из MYTABLE где Mycol LIKE '% автомобиль'

и закончился с автомобилем:

Выберите * из MYTABLE где MYCO l LIKE '% car'

+0

это любая комбинация, поэтому LIKE «c% r» также действительна (и будет соответствовать, скажем, как автомобиль, так и czar – Cruachan

0

% является подстановочным знаком и может заменить символ или комбинацию символов. Использовать? вместо этого заменяет один символ.

1

LIKE% может означать любое количество символов, используйте LIKE _ для обозначения только одного. Поскольку вы ищете символ подчеркивания, вам нужно сбежать от него!

SELECT * FROM BOM_SUB_LEVEL WHERE TOP_CODE LIKE '__________!_%' 
+0

Я пропустил распространенный тег, этот ответ для SQL Server – JamesMLV

+0

Pervasive использует обратную косую черту, а не восклицательный знак, чтобы избежать подстановочных знаков в шаблонах LIKE. –

0

Вы можете попробовать что-то вроде: (игра с числами, я не распространяющийся испытать с)

SELECT * 
    FROM BOM_SUB_LEVEL 
where SUBSTRING(TOP_CODE, 11,1) = '-' 
2

проникающие использует _, чтобы соответствовать любой одиночный символ и \ _ фактически совпадают подчеркивание.

поэтому выбор был бы:

SELECT * FROM "BOM_SUB_LEVEL" where TOP_CODE like '___________\_%' 
Смежные вопросы