How to Trim Characters in SQL Server
If you are looking for following solution than probably this post can help you out:
  - How to      Trim Characters in SQL Server
- How to      Extract Part of String in SQL Server
- Returning      only Numeric Part of String in SQL Server
- Trim      String in SQL Server
- Trim      Left and Right Portion of String in SQL Server
- How to      Sort Numeric String in SQL Server.
 
Note: The Example I am going to discuss is the solution for above mention criteria, understand it and you can be able to derive solution for your problem.
  I want to sort a string like this.
Nodes  
1-49
  100-249
  1000-2499
  10000+
  250-499
  2500-4999
  50-99
  500-749
  5000-9999
  750-999
         
Lets go step by step and then letter sum it up.
Step1: To undergo this task I need to extract characters from left till this “-“ or “+”  character.
Let find length till this “-“ 
  select distinct MyExpr,charindex('-',MyExpr)-1 as Nodes from MyTable
       | 1-49 | 1 | 
     | 10000+ | -1 | 
     | 750-999 | 3 | 
     | 5000-9999 | 4 | 
     | 250-499 | 3 | 
     | 1000-2499 | 4 | 
     | 500-749 | 3 | 
     | 2500-4999 | 4 | 
     | 100-249 | 3 | 
     | 50-99 | 2 | 
 
  
So I also require separate statement for   
select distinct MyExpr,charindex('-',MyExpr)-1 as Nodes from MyTable
     | 1-49 | -1 | 
     | 10000+ | 5 | 
     | 750-999 | -1 | 
     | 5000-9999 | -1 | 
     | 250-499 | -1 | 
     | 1000-2499 | -1 | 
     | 500-749 | -1 | 
     | 2500-4999 | -1 | 
     | 100-249 | -1 | 
     | 50-99 | -1 | 
 
    Now lets extract part of string by using substring function and case select statement.
    select distinct MyExpr as Nodes,
                                      substring(MyExpr,1,(
                                                               case 
                                                                          when charindex('-',MyExpr)-1 = '-1' 
                                                                                      then charindex('+',MyExpr)-1 
                                                                          else charindex('-',MyExpr)-1 end
                                                              )
                                                  ) 
  as 'NodesSort' 
  from MyTable
  Order by  'NodesSort'
   
  So this gives us extraction of Part of string from string.  You can also see trim right portion of string.
     | 1-49 | 1 | 
     | 100-249 | 100 | 
     | 1000-2499 | 1000 | 
     | 10000+ | 10000 | 
     | 250-499 | 250 | 
     | 2500-4999 | 2500 | 
     | 50-99 | 50 | 
     | 500-749 | 500 | 
     | 5000-9999 | 5000 | 
     | 750-999 | 750 | 
 
     
Now casting the string and displaying in sorted order.
    Casting string to int and applying order by for sorting.
    select distinct MyExpr as Nodes,
                          -- SORT Logic
                       cast(  
                                      substring(MyExpr,1,(
                                                               case 
                                                                          when charindex('-',MyExpr)-1 = '-1' 
                                                                                      then charindex('+',MyExpr)-1 
                                                                          else charindex('-',MyExpr)-1 end
                                                              )
                                                  ) 
                          as int) as 'NodesSort' 
  from MyTable 
  order by 'NodesSort'
         | 1-49 | 1 | 
     | 50-99 | 50 | 
     | 100-249 | 100 | 
     | 250-499 | 250 | 
     | 500-749 | 500 | 
     | 750-999 | 750 | 
     | 1000-2499 | 1000 | 
     | 2500-4999 | 2500 | 
     | 5000-9999 | 5000 | 
     | 10000+ | 10000 | 
 
      
This method is not optimal, as we are using functions within function to achieve task, but yet you can achieve the solution, if anyone of you know more better way to achieve same task than please share.