How to create a table with a field 99% INT; 1% STR values? I am creating a table in PostgreSQL and looking for a best approach that I should follow. 

One of my fields are mostly consists of integer values. But really mostly.

Like: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 and over

Last one, 20 and over, kills everything. If it wouldn't be there I am going to create that table with integer field.

Should I create the field in VARCHAR(11) type, just because of the 1% string field? Or is there any other method to solve this issue smoothly?
Apparently you want to store some kind of range where most of the ranges just contain a single element and one of them is open ended. 

You did not explain how you want to use those values. 

If you only use them for display purposes and never, ever under no circumstance (ever!) have to do any calculations on them, a text column might be enough. 

However, I have never encountered a situation where numbers weren't intended to be treated as numbers in the long run. 

Depending on how you use the values, I can think of two solutions: either use a range type where most ranges only contain a single element. Whether or not that makes sense depends on the way you use that value. Maybe the 20 single values actually mean a range from 1 to 20 - it's hard to tell from your question

Or use a two columns: one integer and one indicating the "and above". If you only have the choice between "exactly that value" and "that value and above", I would probably use a boolean column that indicates that the value is the lower end of a range.