OK, first off UCASE() is your friend. So is REPLACE(). These are SQL functions, so please note that in a SQL call you need to use single quotes ' instead of double quotes "
UCASE("Song title") = "SONG TITLE"
REPLACE("The Song's Title", "'", "") = "The Songs Title"
With your examples, you would have to nest calls:
UCASE(REPLACE(REPLACE("Don't.", "'", ""), ".", "")) = "DONT"
You have to be VERY careful with "The" and "A" and the like. You would have to use multiple LEFT() tests - best done in your programming code, instead of your SQL call.
There is also LTRIM() and RTRIM(), which remove white space from the left/right of the string.
Again, most of this is best done in the program, not the SQL. But when you are having to search against uncertain data, it's hard to avoid.
Finally, and unfortunately, the #1 best way to handle bad tag data is to correct the tags on the media files, instead of trying to back your way into the correct result by kludging together a ton of string manipulation. It's tedious, but it provides a huge ease of use return on your investment.