Search code examples
mysqlfieldremoving-whitespace

How to remove leading and trailing whitespace in a MySQL field?


I have a table with two fields (countries and ISO codes):

Table1

   field1 - e.g. 'Afghanistan' (without quotes)
   field2 - e.g. 'AF'(without quotes)

In some rows the second field has whitespace at the start and/or end, which is affecting queries.

Table1

   field1 - e.g. 'Afghanistan' (without quotes) 
   field2 - e.g. ' AF' (without quotes but with that space in front)

Is there a way (in SQL) to go through the table and find/replace the whitespace in field2?


Solution

  • You're looking for TRIM.

    UPDATE FOO set FIELD2 = TRIM(FIELD2);
    

    Seems like it might be worth it to mention that TRIM can support multiple types of whitespace, but only one at a time and it will use a space by default. You can, however, nest TRIMs.

     TRIM(BOTH ' ' FROM TRIM(BOTH '\n' FROM column))
    

    If you really want to get rid of all the whitespace in one call, you're better off using REGEXP_REPLACE along with the [[:space:]] notation. Here is an example:

    SELECT 
        -- using concat to show that the whitespace is actually removed.
        CONCAT(
             '+', 
             REGEXP_REPLACE(
                 '    ha ppy    ', 
                 -- This regexp matches 1 or more spaces at the beginning with ^[[:space:]]+
                 -- And 1 or more spaces at the end with [[:space:]]+$
                 -- By grouping them with `()` and splitting them with the `|`
                 -- we match all of the expected values.
                 '(^[[:space:]]+|[[:space:]]+$)', 
    
                 -- Replace the above with nothing
                 ''
             ), 
             '+') 
        as my_example;
    -- outputs +ha ppy+