'LTRIM ending values throughout entire column using SQL

I have a table with a column named 'ProjectCode' with all values in the column set up as such: 123.21.000. I am looking to write something to iterate through the whole column and remove the ending .000 from all of the entries. Here is an example of the many things I've tried.

select ltrim("Project Code", '.000') 
from "Project Code"


Solution 1:[1]

There are a few ways of doing such something, but since we don't known enough of your data we can only guess

Here are a few posibilities

declare @t table (ProjectCode varchar(50))
insert into @t values ('123.21.000'), ('000123.21.000')

select ProjectCode,
       -- just remove the last 3 chars, whatever they are
       left(ProjectCode, len(ProjectCode) - 3) as [3 last removed],
        
       -- another way of removing the last 3 chars
       substring(ProjectCode, 1, len(ProjectCode) - 3) as [3 last removed substr],
       
       -- remove all '0' chars, both left and right from the value
       trim('0' from ProjectCode) as [trim all zeros],            
       
       -- replace any occurence of '000' by ''
       replace(ProjectCode, '000', '') as [replace 000]             
from @t

This returns

ProjectCode 3 last removed 3 last removed substr trim all zeros replace 000
123.21.000 123.21. 123.21. 123.21. 123.21.
000123.21.000 000123.21. 000123.21. 123.21. 123.21.

Solution 2:[2]

If you're on a fully supported version of SQL Server you could use TRIM:

SELECT TRIM('0.' FROM ProjectCode) AS ProjectCode
FROM dbo.YourTable;

This assumes that your column ProjectCode doesn't have leading 0s or .'s (i.e. '00.123.000' or '0123.456.1').

Solution 3:[3]

You can use PARSENAME function to get the first two values in the string:

DECLARE @Str VARCHAR(100) = '123.21.000'; 
SELECT CONCAT(PARSENAME(@Str , 3) , '.', PARSENAME(@Str , 2))

Result:   123.21

Your query would look something like this:

SELECT CONCAT(PARSENAME("Project Code" , 3) , '.', PARSENAME("Project Code" , 2))
FROM "Project Code"

But if you have variable number of '.' and you only want to get rid of the very last . and any value after that, then you can use the following query:

DECLARE @t TABLE(Col VARCHAR(100) )
INSERT INTO @t (Col)
VALUES ('123.21.000') , ('123.21.01.000'), ('123.00.011.0111.0000'), ('123'); 


SELECT REVERSE(SUBSTRING(REVERSE(Col) , CHARINDEX('.', REVERSE(Col)) + 1 , LEN(Col)))
FROM @t

Result: 
123.21
123.21.01
123.00.011.0111
123

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 GuidoG
Solution 2 Larnu
Solution 3