2016-04-19 28 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') 

這將返回沒有03在最後的一切。

%是一個通配符字符,並且表示正常字符之前的任意數量的字符。你可以用_字符做一些類似的事情,它代表一個隨機字符。

至少在SQLServer中。如果你想只用03在最後的結果可能是在其他RDBMS

+0

感謝您的迴應LordBaconPants,我只想列出那些有03和沒有等效04記錄與前5個字符相同的記錄。 – better

0

不同,使用此查詢:

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

偉大的工作,它的工作。 –