2012-09-05 4 views
1

I은 ​​"필터링"속성이 true로 설정되어있는 ADODataSet이 (필터링 = 참) :유사 검색

[No] like '2%' 

I 필터를 적용하면

을 "필터를 열 수 없습니다."라는 오류가 나타납니다. [No]는 정수 유형의 ADODataSet의 필드입니다. 문자열 열과 비슷한 필터를 적용하면 잘 작동합니다.

예컨대 :

[LastName] like 'Jo%'. 

어떤 생각?

감사합니다.

+5

에 필터를 변경'LIKE 2'가되게합니다? 정수는 숫자이므로 숫자로 작업합니다. 20과 29 사이의 정수 값을 찾고있을 때, 정수 'LIKE 2'를 찾지 않으면, 20과 29 사이의 숫자를 찾는다. 'LIKE'는 문자 (문자열) 필드를위한 것이고 다른 것은 없다. , @TLama는 말합니다. –

+0

msSQL에서 int를 string으로 변환하는 함수가 있습니까? 파이어 버드 서버에서 나는 '2 %'*와 같은 * CAST (VarChar (10)과 같은) 또는 '2 %'*와 같은 * (''|| –

답변

1

저는 Ken에 동의합니다. 숫자 값 20에서 29 또는 200에서 299를 찾고 값을 기준으로 검색하면 동의합니다. 질문 할 때 여전히 수행하려면 tAdoDataSet의 Filter 등록 정보가 조회에 "where"절을 추가하는 것과 동일하지 않은지 고려하십시오. where 절은 서버의 구문을 사용하여 서버 측에서 처리됩니다. 반면에 Filter 속성은 소프트웨어 내에서 파싱되며 자체 구문 규칙을가집니다.

옵션 하나는 실제 where 절을 사용하는 것입니다. 내 테스트에서는 MS SQL Server를 사용하고 있습니다.

이 경우 MSSQL의 구문 규칙은 필터를 적용하기 전에 숫자 값을 문자열로 변환합니다.

옵션 2는 문자열을 반환하도록 쿼리를 변경하는 것입니다.

select [LASTNAME], [NO], 
cast ([NO] as varchar(20)) as [NO_AS_CHAR] 
from PEOPLE 

그리고 당신은 정수를 기대하는 무엇

[NO_AS_CHAR] like '2%' 
+1

이러한 옵션 중 어느 것도 의미가 없습니다. 앞에서 설명한 것처럼 수치 (정수) 값 'LIKE 2 %'와 같은 것은 없습니다. 숫자를 처리하는 방식이 아니기 때문입니다. 무의미한 선택을하기 위해 문자열로 변환/변환하는 것은 누군가가 열에 대해 완전히 잘못된 데이터 형식을 사용하지 않는 한 올바른 해결책이 될 수 없습니다. (이 경우 올바른 대답은 "열 유형을 오른쪽으로 변경하고 옵션이 아닌 경우 잘못된 해결 방법입니다"). 내가 downvoting 아니지만, 나는 처음부터 의미가없는 논리를 기반으로 답변을 업데이 트 수 없습니다. :-) –

+1

내가 말했듯이, 켄, 나는 너에게 동의한다. 원래 게시물의 맥락에서 나는 열 [NO]에 직원 번호와 같은 식별자가 들어 있다고 추측합니다. 수치가 아니므로 직원 수가 "2173"인 것이 2 천 73 명이 있다는 것을 의미하지는 않습니다. 데이터베이스 스키마를 설계 한 사람은 숫자 형식을 사용했는데, 그 이유는 아마도 구별을 이해하지 못했거나 성능을 위해 더 작은 데이터 형식이 필요했기 때문일 수 있습니다. 나는 데이터 형식을 변경하는 것이 이상적이라고 생각하지만 아마도 이것은 포스터에 사용할 수있는 솔루션이 아닙니다. –

+1

:-) 당신은 오해했습니다.내 이의 제기는 데이터 형식을 전혀 변경하지 않는 것이 좋습니다. 물론 선호되는 수정 방법이었을 것이므로 대안으로 대안을 제공 할 수도 있습니다. 그러나, 나는이 경우에 전환이 옳다고 생각하지 않는다. 그것이 4 자리 직원 ID라면 더 나은 질의는 데이터의 적절한 사용이고 완전히 변환을 피하는'WHERE [아니오] BETWEEN 2000 AND 2999'가 될 것입니다. :-) –