2012-10-09 32 views
0

我有兩列參觀visit_sequence,使用得到一個類似模式,在SQL通配符

Example table 

Visit   Visit_sequence 
1    43:65:34:21:343 
2    22:78:113:37 
3    43:465:72:21:1187:542 

The semi colon is present in the field. 

現在,如果我要檢查,如果某次訪問包含數字訪問序列43,65和21是什麼我應該使用條件(最短條件)嗎?

如果我寫

case when visit_sequence like '%:43:%:65:%:21:%' 

case when visit_sequence like '%43%:%65%:%21%' 

這些絕對不會工作。我不需要整個代碼,只需要like之後的部分。

+0

你爲什麼要找43,65,21 **在一個地方,43,65 **,** 343 **在兩個人? – RichardTheKiwi

+0

哪個RDMS?甲骨文? –

+0

@richardthekiwi sry typo。 – user1356163

回答

1
select * 
    from visits 
where ':'+visit_sequence+':' like '%:43:%' 
    and ':'+visit_sequence+':' like '%:65:%' 
    and ':'+visit_sequence+':' like '%:21:%' 

我希望你有一個小桌子,因爲你的非規範化存儲格式不會與拋給它對於這個問題的任何類型的查詢表現良好。

+0

我需要它在一條線。情況下...像''..有沒有其他的野性字符除了%將解決這個問題? – user1356163

+0

在一行中?你可以把ands放在同一行,如... – RichardTheKiwi

+0

如果Teradata支持REPLACE natively(不是udf),我可以建議其他東西,但它甚至沒有。 – RichardTheKiwi

0

試用REGEXP_LIKE如果您使用的是Oracle

select * 
    from visits 
    where REGEXP_LIKE (visit_sequence, '43:.*65:.*21') 
相關問題