2010-04-27 11 views
0

는 아래 데이터의 경우

Nodes 
------------------------ 
\node1\node2\node3\ 
\node1\node2\node5\ 
\node1\node2\node3\node4\ 
\node1\node2\node3\node4\node5\ 

궁금 해서요 (내가 to..below를 참조 할 필요가 팀 파운데이션 서버 테이블에서 더 많은 노드가 well..there 단지 샘플입니다) 내가 (쿼리가 필요한 결과를 제공하지 않습니다 아래)

select * from table_a where nodes like '\node1\node2\%\' 

얻을 수있는 아래의 데이터 같은 것을 적용 할 수있는 경우

\node1\node2\node3\ 
\node1\node2\node5\ 

(아래 필요한 결과를 제공하지 않습니다) 같은 것이

select * from table_a where nodes like '\node1\node2\%\%\' 

\node1\node2\node3\ 
\node1\node2\node5\ 
\node1\node2\node3\node4\ 

를 얻을 수는 위가 연산자와 같은 와 함께 할 수 있습니까? Pls. 제안해라. 이 (기본적으로 그냥 마지막 백 슬래시 제거) 작업을하는 것처럼 보인다

감사

+0

했던 곳과 같은 노드 '\ 노드 1 \ 노드 2 \ % \ %' – THEn

+0

결과는 이러한 쿼리가 제공하는 일? – EMP

+0

@THEn :이 쿼리는 \ node1 \ node2 \ node3 \ node4 \ node5 \를 제공합니다. – stackoverflowuser

답변

1

두 용어, LIKE를 결합하고 싫어해야합니다 :

select * from table_a where 
    nodes like '\node1\node2\%\' AND 
    nodes NOT like '\node1\node2\%\%\' 
첫 번째 쿼리에 대한

, 두 번째의 유사한 솔루션을. 그것은 "일반 SQL"입니다. 예를 들어, 열의 "\"문자 수를 세는 SQL Server 고유 함수가있을 수 있습니다.

+0

+1 : 8 초 만 기다려주세요! – Joel

0

:

select * from table_a where nodes like '\node1\node2\%\%' 

편집을

또한이 시도 할 수 :

select * from table_a where 
     nodes like '\node1\node2\%\' or 
     nodes like '\node1\node2\%\%\' 
+0

더 나은 의도 한 결과를 반영하기 위해 내 질문을 편집 \ \ 노드 1 \ 노드 2 \ 노드 3 \ 노드 4 찾을 수 있습니다. 이 질의는 나에게 \ node1 \ node2 \ node3 \ node4 \ node5 \를 줄 것이다. – stackoverflowuser

+0

@stackoverflowuser :이 경우 두 개의 서로 다른 'LIKE'문을 'OR'표현으로 원하는 것을 성취 할 수 있습니다. –

0

아마 resutls를 얻기 위해 구분 기호를 사용할 수 있습니다. 는 당신이 실제로 얻을 하려는지 명확하지 않다, 그러나 당신은에

substr 

기능을 사용하거나 계산 또는 구분 기호 '/'문자의 위치를 ​​찾을 수 있습니다.

0

파티가 조금 늦었지만 문제가 아직 남아있는 것처럼 보입니다. 백 슬래시가 백분율 기호의 와일드 카드 의미를 벗어날 수 있습니까? 그리고 백 슬래시 n도 해석 될 수 있습니다.

0

SQL Server가 단일 문자에 대해 와일드 카드를 알고 있지 않습니까?

select * from table_a 
    where nodes LIKE '#node1#node2#node_#'; 
     nodes   
--------------------- 
#node1#node2#node5# 
#node1#node2#node3# 

는 나는 내가 #로 대체 이유입니다 백 슬래시를 삽입하기 어렵다 PostgreSQL을에이 testet.

: PostgreSQL을에

SELECT * FROM table_a 
WHERE (nodes LIKE '#node1#node2#%#' 
    AND NOT nodes LIKE '#node1#node2#%#%#'); 

과 유사한, 또는 ~와 너무 패턴에 일치 할 가능성이있다 : (내 편의를 위해 사용 #) 하나 이상의 백 슬래시를 부정 - 여기

은 또 다른 가능성은
SELECT * FROM table_a 
WHERE nodes SIMILAR TO '#node1#node2#[^#]*#'; 
     nodes   
--------------------- 
#node1#node2#node5# 
#node1#node2#node3# 

[]는, 예를 들어 [AEIOU] 소문자 보컬 것, 또는 허용 된 문자들의 그룹을 캡슐화한다. 그러나 캐럿이 괄호 안의 첫 번째 기호 일 때 기호는 무효화되므로 [^ aeiou]는 소문자 보컬을 의미하지만 [^ #]는 #을 의미합니다. 그 표현 뒤에있는 별표는 앞의 기호가 0에서 백만 번까지 자주 발생할 수 있음을 의미합니다. (+는 적어도 한 번 의미 할 것이고,?는 0 또는 1 회를 의미 할 것이다).

그래서 '# node1 # node2 # [^ #] * #'은 '# node1 # node2 #'을 의미하며 그 뒤에 해시, 0 또는 단일 또는 여러 번, 그리고 마지막으로 해시가옵니다. 당신이 table_a SELECT * FROM 시도

관련 문제