전체 이름이 들어있는 Name 필드가있는 MySQL 데이터베이스가 있습니다. 특정 문자로 시작하는 성을 가진 사람을 모두 선택하려면이 예에서 A, 다음 검색어를 사용한다고 가정 해 봅시다 : SELECT * FROM db WHERE Name LIKE '% A%'
. 그러나 이것은 중간 이름이 A 인 사용자도 선택합니다. A에서 시작하는 성만 선택되도록이 쿼리를 변경하는 방법이 있습니까?MySQL 특정 문자로 시작하는 성을 가진 이름 선택
1
A
답변
4
SELECT * FROM db WHERE Name REGEX ' A[-[:alnum:]'']*$'
2
이그나시오의 정규식 작업 및 훨씬 더 유연 - 정규식은 완전히 혼란 경우에도이 같은 것을 사용할 수 있습니다
SELECT * FROM db WHERE LEFT(SUBSTRING_INDEX(Name, ' ', -1), 1) = 'A'
http://dev.mysql.com/doc/refman/5.1/en/string-functions.html
1
나는 최근에 같은 상황이 있었다 . 최적의 솔루션은 전체 이름으로 데이터베이스에 이름을 저장하지 않는 것입니다. 그러나 때때로 우리는 데이터를 제어하지 못하고 솔루션이 필요합니다. 나는 다음을 사용하여 끝냈다 :
이것은 'J'로 시작하는 성을 검색 할 것이다. 데이터베이스의 일부 이름에 Jr 또는 Sr이 포함되어 있기 때문에 J와 S가 가장 어려운 것으로 나타났습니다.
나는 이것이 매우 어려운 해결책이라는 것을 언급해야하고, 작동하지 않을 때 나는 많은 경우를 생각할 수있다. 그것은 매우 오래 매우 빠르게 될 수 있습니다. 하이픈이있는 이름이나 아포스트로피가있는 이름을 설명하지만 이름을 일치시키는 확실한 방법은 없습니다.
무슨 일이 일어나고 있는지에 대한 간략한 설명 :
- 첫 번째 공간은 우리가 결코 이름에 일치하지 않습니다 확인합니다.
- [[: < :]]는 단어 경계의 시작 부분 인 [[:> :]]은 단어의 끝과 일치합니다. 그래서 [[: < :]] j는 J로 시작하는 단어를 찾습니다. mysql은 문자열을 일치시킬 때 대소 문자를 구별하지 않습니다.
- $는 성을 찾고 있으므로 문자열의 끝임을 확인합니다. 이는 주니어 또는 주니어와 Sr 또는 Sr.에게 문제가되므로 {3,}은 2 글자보다 길고 마침표를 허용하지 않음을 확인합니다. 나는 이것이 Xu와 같은 유효한 2 글자 성을 건너 뛰는 것을 깨닫는다. 그러나 나는 데이터베이스에 Xus보다 더 많은 Jrs를 가지고있다. 또 다른 해결책은 {3,}을 *로 대체하는 것입니다. 그런 다음 두 개의 문자 이름이 반환되지만 주니어가 마침표를 빠뜨리면 반환됩니다.
- 마지막으로이 표현식은 'jr. $'와 'sr. $'의 두 가지 다른 경우와 함께 실행되어 성이 검색 할 문자와 일치 할 때 Jr. 및 Sr. 결과가 반환됩니다.
II 또는 III과 같은 추가 사례도 추가 할 수 있습니다.
또한 MySQL REGEXP 설명서를 참조 할 수 있습니다.
관련 문제
- 1. 문자열에서 특정 문자로 시작하는 단어를 추출하십시오.
- 2. 특정 문자로 시작하는 모든 파일 복사
- 3. wordnet에서 특정 문자로 시작하는 모든 단어를 추출합니다.
- 4. 특정 성을 가진 객체를 요청하는 NSFetchRequest를 만드는 방법은 무엇입니까?
- 5. 특정 기술을 가진 사람들을 검색하기위한 MySQL 쿼리
- 6. 특수 문자로 시작하는 라우팅 URL
- 7. 특정 문자로 시작하는 키와 일치시킬 바이트 범위를 만듭니다.
- 8. 선택 행 특정 값을 가진 행 다음
- 9. 여러 테이블과 유연한 출력을 가진 mysql 선택
- 10. vim : 문자로 선택, 포함하지 않음
- 11. 사용자 목록 페이지에서 이름, 성을 나열하십시오.
- 12. 프로필에 의해 Drupal 검색 사용자 이름과 성을 가진
- 13. 특정 문자열로 시작하는 이름을 가진 XML 파일의 요소를 찾는 방법
- 14. 적절한 이름 선택
- 15. PHP Regex - "#"문자로 시작하는 단어에 문자열 추가
- 16. 문자열 배열의 문자로 시작하는 요소 검색
- 17. 필드가 특정 문자로 시작되어야하는 Lucene 검색
- 18. MySQL이 특수 문자로 문자열 선택
- 19. 특정 반경을 가진 다각형 만들기
- 20. 선택 리튬 가진 이미지
- 21. JSoup에서 "이름"으로 선택
- 22. 인 텐트를 통해 이름과 성을 가진 연락처를 추가하는 방법
- 23. [PHP] [MySQL] 어떻게 두 개의 제약을 가진 데이터를 선택 하시겠습니까?
- 24. 선택자로 시작하는 속성 [이름^= 값]
- 25. 소문자로 시작하는 C# 클래스 이름
- 26. 이름 Python으로 시작하는 파일 삭제
- 27. java로 시작하는 자바 클래스 이름
- 28. 단일 쿼리에서 두 개의 특정 mysql 테이블 행 선택
- 29. MYSQL : 선택 거부
- 30. 모든 열에 더하기 하나의 특정 열을 가진 mysql 쿼리
마지막으로 공백이있는 단점이 있습니다 (예 : "Van Buren"-하지만이 유형의 필드에서 중성과 성을 구별하는 좋은 방법이 없을 것 같습니다. – AvatarKava