2012-05-14 3 views
0

작은 검색 기능을 가진 웹 응용 프로그램을 만들었습니다. 내 검색의 일부로 사용자에게 달러 금액으로 검색 할 수있는 옵션을 제공합니다. 일부 검색을 수행하고 "LIKE"절 이외의 조언이 SQL의 숫자에서 작동하지 않으므로 제 질문은 다음과 같습니다.SQL에서 DB의 숫자/통화 값 검색

올바른 SQL 문 예를 제공 할 수 있습니까? 데이터베이스에서 십진수가있는 숫자를 검색 할 수 있습니다. 예를 들어 통화 검색으로 일부 입력 5234.32가있는 경우 'amount'열이 5xxx.xx 인 레코드를 반환하도록하고 싶습니다. 사용자가 64.58를 입력 한 경우, 내가 그 모든 레코드를 반환 할 것 "양"열은 데이터베이스에 따라 사전

+0

이 작업에는 산술 연산이 필요합니다. 'LIKE'으로 이름 짓기는 가능하지만 멋지지는 않습니다. –

+0

[Stack Overflow는 개인 연구 비서가 아닙니다.] (http://meta.stackexchange.com/a/128553/140505) - 우리는 여러분이 시도한 것을 보여주고 전에 멈춘 곳을 설명해 주었으면합니다. 우리는 그 질문에 답합니다. – Oded

+0

어떤 데이터베이스입니까? –

답변

0

에서 6x.xx

감사합니다, 당신은 아마이 작업을 수행 할 수 있습니다

-- Oracle 
WHERE TRUNC(amount, -decimals) = TRUNC(:user_input, -decimals) 

-- MySQL 
WHERE TRUNCATE(amount, -decimals) = TRUNCATE(:user_input, -decimals) 
decimals으로

나는 즉

TRUNC(5234.32, -3) = 5000.00 
TRUNC(64.58, -1) = 60.00 

유지하려는 소수점의 왼쪽 자리의 수, w는 SQL의 소수를 발견하는 바보 방법을 의미 이 수 울드 : 그의 대답에 Branko 등이 느린 것으로 판명 수 물론

-- Oracle 
LENGTH(TO_CHAR(TRUNC(amount))) 

-- MySQL 
LENGTH(CAST(TRUNCATE(amount) AS CHAR)) 

을 언급

0

당신은 VARCHAR로 변환 할 수 있습니다 등을 사용할 수 있습니까?

그렇지 않으면 @ypercube 명시된 것과 같은 산술 연산을 사용할 수 있습니다.

+0

감사! 이것이 처음 접근 이었지만 더 정확한 방법이 있는지 확인하고 싶었습니다. 고마워요. –

+0

@ MarkJohnsII 답변을 수락해야합니다. 아니면 언젠가 아무도 대답하지 않을 것입니다. 여기에서 수행 방법을 확인하십시오. http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

2

5xxx.xx에 대한 검색은 5000 <= field AND field < 6000과 동일합니다.

DBMS가 기존 인덱스를 사용하지 못하게하기 때문에 필드를 자르지 않는 것이 좋습니다. 위의 범위 스캔은 field에 대한 인덱스가 있다고 가정하면 매우 효율적입니다.