2017-06-14 43 views
0

例如我有一個表稱爲X和與柱的裏面Y.SQL字符計數

Y具有500000個值等

190|12131|23|123|0|0|0|0|112 
220|234|23|111|0|1|0|1|769 
中的每個值

有8 |

但在某些價值觀有錯誤,而不是8 |

11|0000020|12|14 -----3 | 
234|23|000|1|2 ------4 | 

如何列出小於8的值?|

我需要使用函數嗎?如果是這樣,我如何以及如何調用該功能。我從來沒有在SQL中使用函數。

+0

查找字符串的長度,然後從中減去長度減去所有出現的|使用替換爲空集''。這會給你一個數字。如果這個數字少於8,你就知道這是你感興趣的一個。這也可以讓\你找到大於8的值,因爲你可以說這個值是<> 8。由於這些函數因數據庫而異,所以你需要指定使用的數據庫。 – xQbert

+0

你正在使用哪些DBMS? Postgres的?甲骨文? –

+0

我使用ms-sql。謝謝 – Rengar

回答

2

假設最大8 |

不優雅,也不sargible

Select * 
from X 
Where Y not like '%|%|%|%|%|%|%|%|%' 
3

而不是計數|的發生,你可以比較字符串字符串的長度沒有|

select * 
    from X 
    where length(Y) <> (length(replace(Y, '|', '')) + 8) 

如果沒有把握這比約翰的答案快。

+0

Plus1 - 我的拳頭也是這麼想的,你們允許+/- 8。只是不確定哪個dbms。 –