Found someone had made this mistake, beware when doing something like
where @LOCNCODE is a varchar
The function is defined as:
STR ( float_expression [ , length [ , decimal ] ] )
So the variable is getting converted to a float before it is then turned back into a character data type, problem in my case was that it had worked for years until LOCNCODE one day contained letters as well as numbers.