2013-07-07 1 views
8

이름이 'A'로 시작하는 행을 'D'로 시작하는 이름까지 선택하는 방법은 무엇입니까? 알파벳순으로 정렬합니까? 좋아요와 = <>의 조합과 같은 것?글자 범위 선택

샘플 테이블 :

ID  Name 
4001  Spartakol 
4002  Tabunjong 
4003  Mabini 
4004  Carlos 
4005  Antonio 
4006  Babsy 
4007  Jose 
4008  David 
4009  Cruz 

샘플 출력 :

4009  Cruz 
4008  David 
: 이름

4005  Antonio 
4006  Babsy 
4004  Carlos 
4009  Cruz 
4008  David 

는 'D'

예제 출력으로 시작하는 이름까지 "CR"로 시작

답변

13

가 최대 'A'에서 이름을 선택하여 사용할 수 있지만 :

select ID, Name 
from SampleTable 
where Name >= 'A' and Name < 'E' 
order by Name 

을이 일반 비교이기 때문에, 그것은 사용할 수 있습니다 해당 필드에 대한 색인이 있으면 색인을 생성하십시오. 표에서

+0

왜 downvote? 잘못이라고 생각하는 것을 설명하지 않으면 대답을 향상시킬 수 없습니다. – Guffa

+0

왜 Name> = 'A'이고 Name <= 'D'입니까? 왜냐하면 textBox가 필터링 할 매개 변수 인 곳에서 응용 프로그램과 함께 사용하기 때문입니다. 그래서 그것은 textBox + 1과 같은 것이 될 것입니까? 예를 들어 사용자가 D까지 입력하면 쿼리는 "Name> = 'A'와 Name < 'D'"와 같아 질 것입니다. 그러면 모든 D가 표시되지 않습니다. –

+2

@SquarePonge :''D '<'David '이기 때문에'Name'= 'A'와 Name <= 'D''는 D로 시작하는 이름을 포함하지 않습니다. 'Name < 'E'를 사용하면 D로 시작하는 모든 이름을 포함하지만 E로 시작하는 이름은 포함하지 않습니다. – Guffa

1
select id, name 
from table 
where LOWER(LEFT(name, 1)) between 'a' and 'd' 
order by name; 
여러 문자를 일치 시키려면

다음 'E' 포함되지

select id, name 
    from table 
where name >= 'Cr' 
    and (name < 'D' OR name like 'D%') 
order by name; 
+0

Ilia G에 대한 내 코멘트보기 –

+0

@iDevlop 질문은 성능에 관한 것이 아니 었나요? – chetan

+0

아니요.하지만 부진한 대답은 목표가 아닙니다. 그렇습니까? –

-2
select * 
from Foo 
where substring(name, 1, 1) between 'a' and 'd' 
order by name 
+0

-1 : 인덱스 및 모든 종류의 최적화를 무력화하는 방법에 대한 완벽한 예입니다. 수식을 피할 수 있으면 필터링하지 마십시오! –

+0

이전 의견에 동의하십시오. –

0

선택 ID, 이름 LOWER (LEFT (이름, 1)) 'A'사이에서 'D'이고; 이름순;

+0

내 실수도 복사했습니다. Lol ... – chetan

4

아마도 Guffa의 답변이 가장 효율적입니다. 완료하기 위해, 당신은 또한 데이터베이스 COLLATION에 따라

LIKE '[a-d]%' 

사용할 수 LIKE는 대소 문자를 구분 여부 될 수 있습니다.

+0

-1은 건설적인 것으로 문서화되어야합니다. –

+0

문서화 : http://msdn.microsoft.com/en-us/library/ms179859.aspx – Curt

+0

@Curt : "-1은 문서화되어야한다"는 이유 (아마도 '문법 나치'를 다루는 사람과 같은 사람)를 말하지 않고 내 대답을 싫어하는 사람을위한 것입니다. –