2013-10-21 7 views
20

마지막 '='(http://www.domain.com?query=blablabla -> blablabla) 다음의 모든 항목을 추출해야하지만이 쿼리는 전체 문자열을 반환합니다. 여기에 잘못 않은 경우 :특정 문자 다음에 오는 모든 것을 SQL SELECT하십시오.

SELECT RIGHT(supplier_reference, CHAR_LENGTH(supplier_reference) - SUBSTRING('=', supplier_reference)) 
FROM ps_product 
+2

어떤 데이터베이스 엔진을 사용하고 있습니까? 그것은 SQL Server가 아닙니다. – acfrancis

답변

35
select SUBSTRING_INDEX(supplier_reference,'=',-1) from ps_product; 

더 참조 http://www.w3resource.com/mysql/string-functions/mysql-substring_index-function.php을 사용하십시오.

+2

그럴 경우 몇 가지 문제가 발생할 수 있습니다. '='이 없으면 다음과 같이 사용할 수 있습니다 :'SELECT IF (LOCATE ('=', supplier_reference), SUBSTRING_INDEX (supplier_reference, '=', - 1), default_value) FROM ps_product;'그리고 원래의 전체 열을 반환하는 대신 기본값을 설정할 수 있습니다. – golddragon007

+0

문자열에 여러 개의 '='가 포함되어 있고 처음 '='다음에 오는 모든 것을 원한다면 어떻게해야합니까? –

7

이 (문자열에 여러 '='문자가있는 경우는 작동합니다) 시도 :

SELECT RIGHT(supplier_reference, (CHARINDEX('=',REVERSE(supplier_reference),0))-1) FROM ps_product 
3

는 MySQL의에서 이것을 시도하십시오.

right(field,((CHAR_LENGTH(field))-(InStr(field,',')))) 
+1

귀하의 기여에 감사드립니다. 이것이 어떻게 문제를 해결하는지에 대한 설명을 추가하는 것이 더 도움이 될 것입니다. –

0

SQL Management Studio의 경우 변형 된 BWS 응답을 사용했습니다. 심볼이 존재하지 않는 경우는 '=', 또는 NULL의 오른쪽에있는 데이터를 가져옵니다 문자열에 '='문자 여러가있는 경우 MySQL의에서

CASE WHEN (RIGHT(supplier_reference, CASE WHEN (CHARINDEX('=',supplier_reference,0)) = 0 THEN 
    0 ELSE CHARINDEX('=', supplier_reference) -1 END)) <> '' THEN (RIGHT(supplier_reference, CASE WHEN (CHARINDEX('=',supplier_reference,0)) = 0 THEN 
    0 ELSE CHARINDEX('=', supplier_reference) -1 END)) ELSE NULL END 
1

을,이 작품

SUBSTRING(supplier_reference FROM (LOCATE('=',supplier_reference)+1)) 

첫 번째를 찾은 후 (+1) 부분 문자열을 반환합니다.

+0

이것은 '='가 여러 개인 경우에 유용하며 '='가 처음 나타난 후에 문자열을 원합니다. –

관련 문제