我有一個表,其中有一列名為“ProjectCode”,列中的所有值都設定為:123.21.000。我希望寫一些東西來遍歷整個列并從所有條目中洗掉結尾的 .000。這是我嘗試過的許多事情的一個例子。
select ltrim("Project Code", '.000')
from "Project Code"
uj5u.com熱心網友回復:
如果您使用的是完全受支持的 SQL Server 版本,則可以使用TRIM:
SELECT TRIM('0.' FROM ProjectCode) AS ProjectCode
FROM dbo.YourTable;
這假定您的列ProjectCode沒有前導0s 或.'s(即'00.123.000'或'0123.456.1')。
uj5u.com熱心網友回復:
有幾種方法可以做到這一點,但由于我們對您的資料了解不夠,我們只能猜測
這里有一些可能性
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
這回傳
| 專案代碼 | 3 最后洗掉 | 3 最后洗掉的 substr | 修剪所有零 | 替換 000 |
|---|---|---|---|---|
| 123.21.000 | 123.21。 | 123.21。 | 123.21。 | 123.21。 |
| 000123.21.000 | 000123.21。 | 000123.21。 | 123.21。 | 123.21。 |
uj5u.com熱心網友回復:
您可以使用PARSENAME函式來獲取字串中的前兩個值:
DECLARE @Str VARCHAR(100) = '123.21.000';
SELECT CONCAT(PARSENAME(@Str , 3) , '.', PARSENAME(@Str , 2))
Result: 123.21
您的查詢將如下所示:
SELECT CONCAT(PARSENAME("Project Code" , 3) , '.', PARSENAME("Project Code" , 2))
FROM "Project Code"
但是,如果您有可變數量的'.'并且您只想擺脫最后一個 . 以及之后的任何值,然后您可以使用以下查詢:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/451042.html
