2013-12-08 3 views
1

많은 열이있는 '고객'테이블이 있다고 가정하고 'Thomas'(성 = '토마스')로 끝나는 모든 고객을 표시하려고합니다. 다음 쿼리는 빈 결과 (행 없음)를 보여줍니다. 또한 오류를 표시하지 않았습니다.SQLite3에서 열의 특정 텍스트 값 검색

SELECT * FROM Customer WHERE Lastname = 'Thomas'; 

다음 쿼리를 실행하면 정확한 결과를 얻을 수 있습니다.

SELECT * FROM Customer WHERE Lastname LIKE '%Thomas%'; 

첫 번째 쿼리의 문제점을 알고 싶습니다. Npm과 함께 sqlite3을 사용하고 있습니다. 아래는 '.show'명령의 결과입니다 (문제가 config 인 경우).

sqlite> .show 
    echo: off 
    explain: off 
    headers: on 
    mode: column 
nullvalue: "" 
    output: stdout 
separator: "|" 
    stats: off 
    width: 
+0

일치해야한다고 생각되는 레코드의 '성'열에 정확한 값은 무엇입니까? –

답변

2
  1. 사용처럼 대신 =
  2. 트림은 아마, 그래서 쿼리가 당신의 종류에 따라

    SELECT * FROM Customer WHERE trim(Lastname) LIKE 'Thomas'; 
    

    될 것입니다 주위

장난 공간이이 arent 수 있도록 당신은 읽을 필요가 없으므로 포인트 2가 필요하지 않습니다. mysql manual

모든 MySQL 데이터 정렬은 PADSPACE 유형입니다. 이것은 MySQL의 모든 CHAR VARCHAR 값과 모든 후행 공백

그러나 포인트 1은 용액 일 수에 관계없이 비교하는 것을 의미한다. 실제로 문제를 피하려면, = 대신 LIKE와 문자열을 비교해야합니다.

여전히 문제가있는 경우 콜레이트를 사용해야합니다.

SELECT * 
FROM t1 
WHERE k LIKE _latin1 'Müller' COLLATE latin1_german2_ci; #using your real table collation 

자세한 내용 here 그러나 구체적으로 어떤 특수 문자를 가지고 있지 않았기 때문에 당신이 그것을 필요가 없습니다 '토마스'와.

+0

제공된 검색어로 결과를 볼 수있었습니다. Carlos의 도움에 감사드립니다. :-) – shaunthomas999