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
Related
This question already has an answer here:
How to match a fixed string ending with a number using regex [duplicate]
(1 answer)
Closed 2 years ago.
I'm trying to select, from mysql, some specific tables that matches a pattern.
The specific pattern I'm looking for is like 'my_table_number'. For example, my_table_436814 or my_table_35413. The thing is that there are other tables that looks like my_table_old_14353 or my_table_351434_times. I just want to filter out the ones that are my_table_number.
I have tried different patterns, but failed to get what I really need.
The most closest approach was with this:
select table_name from
information_schema.columns ca
where ca.table_name REGEXP '[0-9]$'
How can I achieve what I'm looking for?
Use
REGEXP '^my_table_[0-9]+$'
See proof
NODE
EXPLANATION
^
the beginning of the string
my_table_
'my_table_'
[0-9]+
any character of: '0' to '9' (1 or more times (matching the most amount possible))
$
before an optional \n, and the end of the string
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.
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.
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.
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.