Cómo limitar la búsqueda y replace cadena en mySQL

Estoy usando esto para search y replace cadenas en mySQL:

UPDATE products SET prodname = REPLACE(prodname, " S", "'S") 

Los productos contienen cadenas como "TYLENOL TABS 100 S" que me gustaría convertir a "TYLENOL TABS 100'S".

Sin embargo, el uso de la instrucción SQL anterior también afecta a cadenas como "NIKE SHOES", que se convertirán en "NIKE'SHOES", que obviamente no me gustan.

¿Hay alguna forma de limitar la function de reemploop (o hay otra forma de hacerlo) para poder get el resultado que deseo? La "S" usualmente está en el extremo final de la cadena para la mayoría de mis datos, lo que espero sea útil.

Puede limitar eso a un subset más cerrado a sus necesidades colocando una cláusula WHERE con un REGEXP ():

 UPDATE products SET prodname = REPLACE(prodname, " S", "'S") WHERE prodname REGEXP '[0-9]\sS' 

Esto coincide con las filas de los nombres de productos que tienen un número, seguido de un espacio, seguido por un S. Lamentablemente no hay reemploop REGEX implementado por defecto en MySQL, para poder replace solo esa coincidencia, por lo que esto también replaceá "TYLENOL TAB SOLO 100 S "a" TYLENOL TAB'SOLO 100'S ", pero no replaceá en su original" TYLENOL TABS 100 S "

Tu podrías intentar:

 UPDATE products SET prodname = REPLACE(prodname, " S", "'S") WHERE prodname LIKE "% S" 

Esto significa que los productos con un prodname termina con S se actualizarán. El % char significa algo.

Si solo quieres que el nombre del prodname termine en S , entonces también puedes usar:

 UPDATE products SET prodname = CONCAT(SUBSTR(prodname,1,CHAR_LENGTH(prodname)-2),"'S") WHERE prodname LIKE "% S" 

Esto no replaceía a TYLENOL SOMETHING 100 S a TYLENOL 'SOMETHING 100'S pero a TYLENOL SOMETHING 100'S . El % char significa algo, como el otro responde en este momento.