2010-11-22 6 views
2

코드 범위가 코드와 관련된 모든 제품에 대해 내 제품 테이블을 쿼리하면 그 결과가 있어야하는 행이 나타납니다.SQL Server 쿼리가 BETWEEN 필터로 일치하지 않는 데이터를 가져옴

이 내 SQL 쿼리입니다 :

select prdcod 
from products 
where prdcod between 'F-DH1' and 'F-FMS' 
order by prdcod 

이 쿼리의 결과는 다음과 같습니다

F-DH1 
F-DH2 
F-DH3 
FET-RAZ  <-- What is this value doing here!? 
F-FMC 
F-FML 
F-FMS 

방법이 홀수 값은 쿼리 결과로이 방법 할 수 있습니까?

추신 : between 대신 <=>=을 사용하면 동일한 결과가 나타납니다.

+5

은 데이터 정렬 제외처럼 보인다 '-'기호 - 결과는 의미가 이런 식으로, FE는 FD와 FM 사이에있다. – Arvo

+1

감사합니다. Arvo! 당신이 옳았고, 그 컬럼 (Modern_Spanish_CI_AS에서 Latin1_General_CP1_CI_AS로)에 대한 데이터 정렬을 변경하면 홀수 값이 제거되었습니다. 내가 너를 업 그레 이드 할 수 있도록 대답으로 다시 쓸 수 있니? 감사! –

+0

@Arvo : 우리는 그것을 upvote 수 있도록 대답해야합니다. @Pablo : "사용자"에게 알릴 @user를 사용하십시오 ... – gbn

답변

4

답변을 다음 주석을 추진 OP의 요청에 따라 :

이 정렬 제외처럼 보인다 '-'부호 -이 방법 결과는 의미가 있습니다. FE는 FD와 FM 사이에 있습니다.

:

0

~> = 및 < = 주로 숫자 작업 (날짜 포함)에 사용됩니다. 이 연산자를 문자열에 사용하려고합니다. 연산자가 각 문자열을 해석하는 방법을 결정하는 것이 어렵습니다.

이제 목표를 여기에서 이해한다고 생각하지만 SQL Server 쿼리를 사용하여 가능하지는 않습니다. 이것은 코드로 구현해야하는 비즈니스 로직 (제품 코드 덕분) 일 수 있습니다. 엔티티 프레임 워크 나 Linq-to-SQL 같은 것이 당신이 원하는 데이터를 얻는데 더 적합 할 수 있습니다.

0

추가하는 방법에 대해 AND LEFT(prdcod, 2) = 'F-'?

+0

할 수 없습니다. 이러한 범위는 특별한 경우입니다. 모든 제품 코드가 'F-'로 시작하는 것은 아닙니다. 범위 제한은 매개 변수로 전달됩니다. –

0

교체 시도해보십시오 "-"공백 순서는 당신이 무엇을 기대하므로 :

DECLARE @list table(word varchar(50)) 

--create list 
INSERT INTO @list 
SELECT 'F-DH1' 
UNION ALL 
SELECT 'F-DH2' 
UNION ALL 
SELECT 'F-DH3' 
UNION ALL 
SELECT 'FET-RAZ' 
UNION ALL 
SELECT 'F-FMC' 
UNION ALL 
SELECT 'F-FML' 
UNION ALL 
SELECT 'F-FMS' 

--original order 
SELECT * FROM @list order by word 

--show how order changes 
SELECT *,replace(word,'-',' ') FROM @list order by replace(word,'-',' ') 

--show between condition 
SELECT * FROM @list where replace(word,'-',' ') between 'F DH1' and 'F FMS' 
+0

이렇게하려면 먼저 범위에서 모든 코드를 알아야합니다. 이는 내가 처음부터 쿼리에서 얻으려는 것입니다. 그래도 replace (@rstart, '-', '')와 replace (@rend, '-', '') 사이에는 replace (prdcod, '-', '')를 사용할 수 있습니다. 해결 방법이 아닌 해결책을 찾고 있어요. –

+0

아니, 당신은 단지 당신이 기대하는 순서를 제공하지 않는 문자를 교체해야 할거야. 주문할 때 "-"는 무시되지만 다른 문자가있을 수도 있습니다. 기본적으로 F-D는 FD와 동일합니다. 즉, FET-RAZ는 F-D와 F-F 시작 코드 사이에 있음을 의미합니다. – Michael

+0

죄송합니다. 당신은 아무런 문제가 없다고 말하는 것처럼 코드에서 사용할 수 있습니다. 그걸 큰 문제로 보지 마라. 데이터 정렬을 변경하는 것보다 낫습니다. – Michael