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


No comments:

Post a Comment