length mysql sql substring string-length

mysql - length - SQL SELECCIONA todo después de un cierto personaje



substring sql (6)

En MySQL, esto funciona si hay varios caracteres ''='' en la cadena

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

Devuelve la subcadena después de que (+1) haya encontrado la primera =

Necesito extraer todo después del último ''='' ( http://www.domain.com?query=blablabla -> blablabla) pero esta consulta devuelve las cadenas completas. ¿Dónde me equivoqué aquí?

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


He estado trabajando en algo similar y después de algunos intentos y fallos se me ocurrió esto:

Ejemplo: STRING-TO-TEST-ON = ''ab, cd, ef, gh''

Quería extraer todo después de la última aparición de "," (coma) de la cadena ... dando como resultado "gh".

Mi consulta es:

SELECT SUBSTR(''ab,cd,ef,gh'' FROM (LENGTH(''ab,cd,ef,gh'') - (LOCATE(",",REVERSE(''ab,cd,ef,gh''))-1)+1)) AS `wantedString`

Ahora déjame intentar y explicar lo que hice ...

  1. Tuve que encontrar la posición del último "," a partir de la cadena y calcular la longitud de la cadena deseada, usando LOCATE(",",REVERSE(''ab,cd,ef,gh''))-1 invirtiendo la cadena inicial I en realidad tenía que encontrar la primera aparición de "," en la cadena ... lo que no fue difícil de hacer ... y luego -1 para encontrar la longitud de la cadena sin ",".

  2. Calcule la posición de mi wantedString restando la longitud de la cadena que he calculado en el primer paso de la longitud de la cadena inicial:

    LONGITUD (''ab, cd, ef, gh'') - (LOCATE (",", REVERSE (''ab, cd, ef, gh'')) - 1) +1

Tengo (+1) porque realmente necesito la posición de la cadena después del último "," .. y no contiene el ",". Espero que tenga sentido.

  1. todo lo que queda por hacer es ejecutar un SUBSTR en mi cadena inicial DESDE la posición calculada.

No he probado la consulta en cadenas grandes, así que no sé qué tan lento es. Así que si alguien realmente lo prueba en una cadena grande, me encantaría saber los resultados.


Intenta esto en MySQL.

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


Intente esto (debería funcionar si hay varios caracteres ''='' en la cadena):

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


Para SQL Management Studio utilicé una variación de la respuesta de BWS. Esto pone los datos a la derecha de ''='', o NULL si el símbolo no existe:

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