Specifically, Sql Server 2005/T-Sql. I have a field that is mostly a series of two characters, and they’re all supposed to be upper case but there’s some legacy data that predates the current DB/System, and I need to figure out which records are in violation of the upper casing covenant.
I thought this would work:
select * from tbl where ascii(field1) <> ascii(upper(field1))
And indeed it returned me a handful of records. They’ve since been corrected, and now that query returns no data. But I’ve got people telling me there is still mixed case data in the DB, and I just found an example: ‘FS’ and ‘Fs’ are both reporting the same ascii value.
Why is this approach flawed? What is a better way to go about this, or how can I fix this approach to work correctly?
if all the date should have been in upper case just do an update
but to answer your original question this query should give you the results that you expect:
Edit: just noticed that the suggestion to use COLLATE was also posted by Ian