Hi, I want to do a pattern matching like i want to search abc-def from my database where as in my where clause i have abcdef and i can't want use like command abc%def.
LifeinAsia
6:09 pm on Aug 18, 2010 (gmt 0)
You'll probably need to use regular expressions. I have very limited experience with regular expressions, so hopefully someone with more experience can suggest the exact format to try.
Thanks for the helpful reply, could you please help me to make a select statement to search abc-def by using abcdef in where clause, please correct me if I am wrong:
select field from table where field like 'abcdef' regexp '^[[:alnum:]]+-*[[:alnum:]]+$';
rocknbil
4:39 pm on Aug 19, 2010 (gmt 0)
I don't think you're going to be able to do that. The regexp must match the data, not the other way around, and you're asking to insert a character where there isn't one in the string, and it really can be anywhere. You could preprocess the input so it's like this, and do a long series of "or's":
where field = 'a-bcdef' or field = 'ab-cdef' or field = 'abc-def' ....
but that would be extremely unwieldy. You should probably re-think your front end, like
This would be faster, more efficient, and less error prone anyway.
whoisgregg
6:08 pm on Aug 19, 2010 (gmt 0)
You could create an additional column that has all hyphens removed from it.
UPDATE `table` SET `search_column` = REPLACE(`sku`, '-', '');
Then just run your queries against `search_column` instead of against `sku`. Whenever someone does an UPDATE/INSERT just make sure you are populating your `search_column` value properly. :)
rocknbil
3:45 pm on Aug 20, 2010 (gmt 0)
There you go . . . then if someone does the dash, you can either just preg_replace the dash on input or do . . . where dashfield='$val' or nondashfield='$val'.