Trimming whitespace in mysql [duplicate] - mysql

This question already has answers here:
MySQL Query, remove all spaces
(2 answers)
Closed 9 years ago.
I have tried using the TRIM() in MySQL to delete all of the whitespace in every field in a column but it will only remove it from the front. I have long strings that have spaces in the middle next to hyphens and I need the space between the hyphens removed. Is there a way to do this?
UPDATE FOO set FIELD2 = TRIM(FIELD2);

Use the REPLACE() method, which can replace every occurrence of a character by another:
UPDATE foo SET field2 = REPLACE(field2, ' ', '');
This query will remove every spaces in the field2 column.
Definition of the method, from the MySQL doc:
Returns the string str with all occurrences of the string *from_str* replaced by the string *to_str*. REPLACE() performs a case-sensitive match when searching for *from_str*.
mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
-> 'WwWwWw.mysql.com'
This function is multi-byte safe.

Related

Print raw string in MySQL [duplicate]

This question already has an answer here:
Escape line breaks in MySQL output
(1 answer)
Closed 3 years ago.
I have a column which contains special characters. I want to print those characters as they are (escaped).
I tried Quote. But that didn't help me.
This is what I want:
select col1 from table;
"Don't\ttype\tlike\this\n\nNot acceptable"
I'm not sure if there is a built in function for this but you could try using replace:
select replace( replace(col1, '\t', '\\t'), '\n', '\\n' ) from table;
Obviously you will need to add more chained replaces for each other escape character you wish to un-escape.
By adding a \ before the escape string, you convert it to a string literal.

erasing 0's from left to right in mysql [duplicate]

This question already has answers here:
mysql: How can I remove character at start or end of field
(5 answers)
Closed 4 years ago.
I have a column in a mysql database table like:
code
0001109A
00002443BD
.....
1233FGV
0PEI223334
i.e. at some rows the code field could have several 0 from left to right and if I find a field like that I need to extract all the 0s. For example, for 00002443BD I need to return 2443BD, for 0PEI223334 I need to return PEI223334, and so on. The number of 0s is not known. Any suggestions?
You are describing a simple TRIM() operation. Other languages and contexts may call this strip(). In context of what you asked:
SELECT TRIM(LEADING '0' FROM `code`) FROM your_table
For completeness, note that:
The default is to trim whitespace from either end, which is the same as BOTH:
SELECT TRIM(' HI ') --> 'HI'
SELECT TRIM(BOTH FROM ' HI ') --> 'HI'
There's TRAILING to trim from the end of the string
SELECT TRIM(TRAILING FROM ' HI ') --> ' HI'
Resources:
Official Documentation (Check out TRIM, and perhaps LTRIM and RTRIM if you only need to remove spaces.)
Handy run-through

Modify str in db [duplicate]

This question already has answers here:
MySQL search and replace some text in a field
(7 answers)
Closed 5 years ago.
I have a table, and in one colu,m I store comma separated strings, like:
book, table, lamp (New)
need to write query loop through all the strings and remove
(New)
I think I can do it by first running a query to fetch results containing (New), then using PHP's REGEX, remove (New) and then update the the same row with new string. However this sounds a bit convoluted. Isn't there a way to do this with a single query?
There is a replace string function in mysql: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_replace
UPDATE <table> SET <column> = REPLACE(<column>,'(NEW)','')
Try it with select first to see if the result is what you want (you may want to remove the trailing space if new is always preceded by it)

Is there any function in MySQL for Regex Replace? [duplicate]

This question already has answers here:
How to do a regular expression replace in MySQL?
(13 answers)
Closed 6 years ago.
I have a table which needs stores some name and i need to replace a few characters before comparing them with another string
For instance, My table data is
abc
ghi:dki
ioe dsa
i read a string from user, which is of the form abc, ghi-dki, ioe-dsa. ie, all blankspaces, multiples spaces and symbols are converted to a hyphon(-). Now i need to compare. something like
SELECT MYCOLUMN FROM MYTABLE WHERE {Converted MYCOLUMN} = 'ghi-dki'
Can someone help me for figuring out which MySQL function can do it?
You can't do a regex replace in MySQL, but you can do a match.
SELECT mycolumn FROM tablename WHERE mycolumn REGEXP Replace('ghi-dki', '-', '^[\s:_-]*$');
Note: I didn't completely fill out the symbols character set, you'll have to add whatever you're using.

MYSQL variable IN clause [duplicate]

This question already has answers here:
MySQL variable format for a "NOT IN" list of values
(3 answers)
Closed 8 years ago.
In filtering out some spam, I have two MYSQL statements in one file,
SET #valid_users := '"admin", "jrock", "kmicka", "First Last"'; //etc
Followed by a SELECT like this
SELECT /*stuff*/ /*WHERE*/ /*filters*/ AND User.user_name NOT IN (#valid_users)
When I do this, it acts as if #valid_users is an empty string. (Returns all results). But if I change the clause to NOT IN ('admin', 'jrock', etc) then it works as it should.
Why would a variable in the NOT IN filter not work?
You'll want to take a look at MySQL's find_in_set() function:
SELECT
*
FROM
your_table
WHERE
NOT FIND_IN_SET(User.user_name, #valid_users);
For this to work, the comma-separated list shouldn't contain quotes (unless your usernames actually contain quotes) and should not be padded with spaces:
SET #valid_users := 'admin,jrock,kmicka,First Last';
SqlFiddle Example
To directly answer your question regarding "why would a variable in the NOT IN filter work", it's because #valid_users is being treated as a string and when you pass it to IN(), it's being treated as a single string (i.e. not a set/list). With FIND_IN_SET(), it treats the string in #valid_users as a comma-separated set/list and uses it accordingly.