You may be able to use the  brackets around the ITEM# column in your SQL statement. I don't really know anything about the AS400 so I don't have any experience with scrambled data.
I tried it and that didn't resolve that issue. I'm going to keep trying at it.
Well, a doubled hash-mark, "##", will be interpreted by CF as "the literal character '#' " amd this might be part-of what you are looking for.
You might need to use Regular Expressions to extract the "good" parts of a string so that you can then typecast it into a number.
You may also need to use a <cftry> block to catch runtime-errors produced by bogus data.
I'm a big believer in the rede which says, "your code should not only not be felled by bad data, but should pro-actively detect and report it." Use a regular expression to validate what you know your incoming data should look like, and <cfthow> an exception with a meaningful message if it does not. If you do this, your program will be able to tell you about data that it has encountred but did not know how to handle. Ergo, if the program runs to completion without throwing up, you can assert that "all those millions of records" were not ill-formed.