2016-04-19 2 views
0

У меня нет большого опыта в SQL. Я хочу отфильтровать записи из таблицы с приведенными ниже критериями.SQL для фильтрации записей с частью значения такой же

Я хочу выделить записи в приведенном ниже примере с результатом, показывающим как «KLMNP03» и «UVXYZ03». есть подобные записи с последними символами, как 03 и 04, но я хочу просто отфильтровать эти записи с только 03 в конце

, например:

col1 
--------- 
ABCDE03 
ABCDE04 
KLMNP03 
LMNOP03 
LMNOP04 
UVXYZ03 
+0

Но вы не хотите ABCDE03, также заканчивающийся 03? – jarlh

ответ

0

Я не уверен, что ваше использование дело есть, но это довольно неэффективно. Лучше использовать целые столбцы. В любом случае, чтобы сделать то, что вы просите:

SELECT * 
FROM yourTable 
WHERE col1 NOT LIKE ('%03') 

Это вернет все, что не имеет конца в конце.

% - символ дикой карты и представляет любое количество символов перед нормальными символами. Вы можете сделать что-то подобное с символом _, который представляет собой один случайный символ.

В SQLServer как минимум. Она может отличаться в других РСУБД

+0

Благодарим вас за отзыв LordBaconPants, я хочу перечислить только те записи, которые имеют 03, и никакие эквивалентные 04 записей с первыми 5 символами одинаковы. – better

0

Если вы хотите, чтобы результаты с только 03 в конце концов, использовать этот запрос:

SELECT *FROM yourTable WHERE col1 LIKE ('%03') 

Это будет возвращать следующие результаты:

  1. ABCDE03
  2. KLMNP03
  3. LMNOP03
  4. UVXYZ03
+0

Извините, мне кажется, что я не правильно сформулировал свой вопрос. Я хочу перечислить те записи, которые имеют «03» в конце и без параллельной записи «04» (в том же столбце) в таблице. – better

+0

Привет, Любая идея, как можно фильтровать эти записи? – better

+0

Что вы подразумеваете под "и с отсутствующей параллельной записью '04' (в той же колонке) в таблице". –

0

Извините, мне кажется, что я не правильно сформулировал свой вопрос.

Я хочу перечислить те записи, которые имеют «03» в конце и без параллельной записи «04» (в том же столбце) в таблице.

0

Попробуйте это:

WITH cte AS(
SELECT col, 1 AS r FROM #tbl 
), 
cte2 AS(
    SELECT CASE 
      WHEN (LEAD(col) OVER (ORDER BY r) NOT LIKE '%04' OR LEAD(col) OVER (ORDER BY r) IS NULL)AND col LIKE '%03' 
       THEN col 
      ELSE 
       NULL 
     END AS col 
    FROM cte t 
) 

SELECT * FROM cte2 WHERE col IS NOT NULL 

Заменить #tbl с вашим именем таблицы и col к вашему имени столбца.

+0

Отличная работа, это сработало. –

Смежные вопросы