Is there a way to show a string instead if numeric column has specific value?
As you want to mix numeric and string values in the same column you need to convert the numbers to strings as well. 

select object_id,
       case 
         when weight &lt; 0 then 'unweighted'
         else weight::text
       end as weight
from the_table;


As that column is no longer a number, you can not sort or compare it properly any more. If you want to put that into a view, I suggest you create an additional column for this purpose:

select object_id,
       weight,
       case 
         when weight &lt; 0 then 'unweighted'
         else weight::text
       end as display_weight
from the_table;


However it would be cleaner if you don't use "magic numbers" to mark the absence of data. Precisely for this reason the NULL value was created in SQL (although using NULL won't solve the problem of mixing numeric and string values in the same column).