Wildcard Search in MySQL, LIKE '%string%' (Fiddle) [duplicate] - mysql

This question already has answers here:
MySQL: is a SELECT statement case sensitive?
(14 answers)
Closed 1 year ago.
I want to search data with condition name = '%Park%'
this is my sample code in Fiddle.
http://sqlfiddle.com/#!9/d0e059/12
when I tried in BigQuery, It returns case sensitive result.
data exactly match with 'Park'. not 'PARK','park'
But in mySQL test which I linked,
it returns all alphabetic 'Park' contains 'PARK','park'
(no case sensitive)
Does mySQL originally NO CASE SENSITIVE EVEN IN DATA?
Or did I go wrong in something??

For case in MySQL you can use LIKE BINARY;
SELECT name, host_name, borough, district, price
FROM airbnb
WHERE name LIKE BINARY '%park%';
MySQL like binary

Related

Mysql regexp to get right table names from database schema [duplicate]

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

MySQL question about getting concret columns [duplicate]

This question already has an answer here:
MySQL LIKE query with underscore
(1 answer)
Closed 4 years ago.
I have a table in my database that contains information like this:
activity: R1A1, R1A2, R1A2_2
My problem is where I'm trying to get all the activities that do not contain the second part (_2).
I'm trying this query: SELECT activity FROM table_name WHERE activity NOT LIKE '%_2' but I'm getting only the activity R1A1. This is because R1A2 contains a number two on its name. How can I solve it? What is the correct query to do that? I want to get all the activities without _2 or something like that on its name.
If I do in an inverse method (SELECT activity FROM table_name WHERE activity NOT LIKE 'R1%' I get the correct results.
How can I get what I need? Thanks for your answers!
in MYSQL, the underscore is a wildcard, much like the % except it matches one character. You can escape it with \ to get the literal.
Here is the correct query:
SELECT activity FROM table_name WHERE activity NOT LIKE '%\_2'
The underscore in LIKE is a wildcard that matches any character. You can escape it. Here is one method:
SELECT activity
FROM table_name
WHERE activity NOT LIKE '%$_2' ESCAPE '$';

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.

Retrving data from MySql with case sensitivity [duplicate]

This question already has answers here:
How can I make SQL case sensitive string comparison on MySQL?
(12 answers)
Closed 8 years ago.
I have a Login table in MySql database . . In table there is a column by cname and one of the value is 'Raghu'. My question is when i write the query as
Select *from Login where cname='raghu';
Then it is retrieving the record which contains 'Raghu' . I want it to retrieve according to case . How can I retrieve with case sensitively, values in the data of tables.
Use: 10.1.7.7. The BINARY Operator
The BINARY operator casts the string following it to a binary string. This is an easy way to force a comparison to be done byte by byte rather than character by character.
Select * from Login where binary cname='raghu';
SELECT * from Login WHERE STRCMP(cname,'Raghu')=0;
Can you try this, you can use LOWER FUNCTION in either column name LOWER('cname') or in value LOWER('raghu');
Select *from Login where LOWER(`cname`) = 'raghu';