我在一欄中有 111-1001-0000-0000 這條記錄,在第二欄中有 453200-0000-000
我想輸出為 111-1001-0000-453200-0000-0000-000
這意味著來自第一列的 111-1001-0000 和來自第二列的 453200 以及來自第一列的 0000 和來自第二列的 0000-000
我嘗試了以下查詢,但得到了 111-1001-453200-0000-0000-000。
第一列缺少 -0000
Declare @1stcolumn nvarchar(30),@2ndcolumn nvarchar(30)
set @1stcolumn='111-1001-0000-0000'
set @2ndcolumn='453200-0000-000'
select substring(@1stcolumn,1,charindex(right(@1stcolumn,charindex('-',reverse(@1stcolumn))),@1stcolumn))
substring(@2ndcolumn,1,charindex('-',@2ndcolumn)) reverse(substring(reverse(@1stcolumn),0,charindex('-',reverse(@1stcolumn))))
'-' substring(@2ndcolumn,charindex('-',@2ndcolumn) 1,len(@2ndcolumn))
uj5u.com熱心網友回復:
找到拆分第 1 列和第 2 列的位置。使用LEFT()andRIGHT()拆分字串,然后按您想要的順序連接回來
; with tbl as
(
select col1 = @1stcolumn, col2 = @2ndcolumn
)
select *,
c1.s1 '-' c2.s1 '-' c1.s2 '-' c2.s2
from tbl t
cross apply
(
select s1 = left(col1, p - 1),
s2 = right(col1, len(col1) - p)
from (
-- find the position of 3rd '-' by cascading charindex
select p = charindex('-', col1,
charindex('-', col1,
charindex('-', col1) 1) 1)
) p
) c1
cross apply
(
select s1 = left(col2, p - 1),
s2 = right(col2, len(col2) - p)
from (
select p = charindex('-', col2)
) p
) c2
uj5u.com熱心網友回復:
先稍作修改substring。為了獲得正確的長度,我使用了LEN.
select substring(@1stcolumn,1,(Len(@1stcolumn) - charindex('- ',REVERSE(@1stcolumn)) 1))
substring(@2ndcolumn,1,charindex('-',@2ndcolumn))
reverse(substring(reverse(@1stcolumn),0,charindex('-',reverse(@1stcolumn))))
'-' substring(@2ndcolumn,charindex('-',@2ndcolumn) 1,len(@2ndcolumn))
uj5u.com熱心網友回復:
我可能會使用 with ,PARSENAME因為它非常簡潔:
WITH YourTable AS(
SELECT '111-1001-0000-0000' AS Column1,
'453200-0000-000' AS Column2)
SELECT CONCAT_WS('-',PN.C1P1,PN.C1P2,PN.C1P3,PN.C2P1,PN.C1P4,PN.C2P2,PN.C2P3) AS NewString
FROM YourTable YT
CROSS APPLY (VALUES(REPLACE(YT.Column1,'-','.'),REPLACE(YT.Column2,'-','.')))R(Column1,Column2)
CROSS APPLY (VALUES(PARSENAME(R.Column1,4),PARSENAME(R.Column1,3),PARSENAME(R.Column1,2),PARSENAME(R.Column1,1),PARSENAME(R.Column2,3),PARSENAME(R.Column2,2),PARSENAME(R.Column2,1)))PN(C1P1,C1P2,C1P3,C1P4,C2P1,C2P2,C2P3);
uj5u.com熱心網友回復:
WITH
test AS
(
select '111-1001-0000-0000' as col1, '453200-0000-000' as col2
)
,cte as
(
select
col1,
col2,
substring
(
col1,
0,
len(col1)-charindex('-',reverse(col1))
) as part1,
substring
(
col2,
0,
len(col2)-charindex('-',col2) - 1
) as part2
from test
),
cte2 as
(
select
part1,
part2,
substring
(
reverse(col1),
0,
charindex('-',reverse(col1))
) as part3,
substring
(
col2,
charindex('-',col2) 1,
len(col2)-charindex('-',col2) 1
) as part4
from cte
)
select part1 '-' part2 '-' part3 '-' part4
from cte2
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/422585.html
標籤:
上一篇:@Param("myParam")字串myParam正在轉換為NVARCHAR(4000)
下一篇:Mssql錯誤:選擇串列中的列'dbo.History.Email'無效,因為它既不包含在聚合函式中,也不包含在GROUPBY子句中
