• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 578
  • Last Modified:

mysql stored proc parameter question

Hi,

I have a field with text that has numbers separated by commas. I want to only return lines that have the passed number in the field (between commas).

Is there a way i can pass a number as my stored proc param and include it in my query?

Thanks in advance
0
basil365
Asked:
basil365
  • 4
  • 2
  • 2
2 Solutions
 
strickddCommented:
you can run the field through a split function, but that can be substantial overhead. The best way I have come up with is to make sure the field always starts and ends with a comma and the searching

where MyField LIKE '%,Number,%'
0
 
basil365Author Commented:
i tried that but i dont know how to concatenate the variable 'Number' into the like clause?
0
 
strickddCommented:
I belive in MySQL, it is simply:

columnName LIKE '%$MySearchTerm%'
0
Improve Your Query Performance Tuning

In this FREE six-day email course, you'll learn from Janis Griffin, Database Performance Evangelist. She'll teach 12 steps that you can use to optimize your queries as much as possible and see measurable results in your work. Get started today!

 
stalhwCommented:
ok, here's an example:

CREATE PROCEDURE foo.bar (IN _Number varchar(20) )
BEGIN
SELECT * FROM someTable
WHERE MyField LIKE CONCAT('%,',_Number,',%');
END

and if your MyField doesn't start and end with a comma, you'll need to do more in the WERE clause
WHERE MyField LIKE CONCAT('%,',_Number,',%')
OR MyField LIKE CONCAT(_Number,',%')
OR MyField LIKE CONCAT('%,',_Number)




0
 
strickddCommented:
These two can return false positives:

OR MyField LIKE CONCAT(_Number,',%')
OR MyField LIKE CONCAT('%,',_Number)

For example, if the number you are looking for is "100" and the data looks like:

100,1,10
1100,1,10
1,10,100
1,10,1001

The two statements will return true for all the records. If you don't start and end with a comma, then you will need this:

SELECT * FROM someTable
WHERE CONCAT(',', MyField, ',') LIKE CONCAT('%,',_Number,',%');

That will ensure no false positives.
0
 
stalhwCommented:
@strickdd:
No they won't return false positive...
Try it, you'll see...

a LIKE without a % in the beginning means the string must start with that we are showing so
1100,1,10 wouldn't match
same for the ending
1,10,1001 wouldn't match either

I agree that
WHERE CONCAT(',', MyField, ',') LIKE CONCAT('%,',_Number,',%');
will work (and is simple),
but my queries wouldn't not produce false positive, you are wrong about that, try it:
SELECT 1 FROM sometable WHERE '1,10,1001' LIKE '%,100'
it will return nothing, so no false positive...

0
 
strickddCommented:
Ah, point taken. I misread the query thinking you left the "%" before the number.
0
 
basil365Author Commented:
Thanks to you both
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

  • 4
  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now