我在一列中有111-1001-0000-0000這條記錄,在第二列中有453200-0000-000
我希望輸出為111-1001-0000-453200-0000-0000-000這意味著第一列的111-1001-0000和第二列的453200,以及第一列的0000和第二列的0000-000 從第2列這意味著第1列的111-1001-0000和第2列的453200,第1列的0000和第2列的0000-000
我嘗試了下面的查詢,但得到的是111-1001-453200-0000-000。
第一列中缺少0000
Declare @1stcolumn nvarchar(30)。 @2ndcolumn nvarchar(30)
set @1stcolumn='111-1001-0000'/span>
set @2ndcolumn='453200-0000-000'/span>
select substring(@1stcolumn,1, charindex(right(@1stcolumn,charindex('-', reverse(@1stcolumn)),@1stcolumn)
substring(@2ndcolumn,1,charindex('-'/span>, @2ndcolumn)) reverse(substring>(reverse(@1stcolumn), 0,charindex('-',reverse(@1stcolumn)))))
'-' substring(@2ndcolumn, charindex('-',@2ndcolumn) 1,len(@2ndcolumn))
uj5u.com熱心網友回復:
找到分割第1列和第2列的位置。使用LEFT()和RIGHT()來分割字串,然后按照你想要的順序串聯回來
; with tbl as.
(
select col1 = @1stcolumn, col2 = @2ndcolumn)
)
select *,
c1.s1 '-'/span> c2. s1 '-' c1. s2 '-' c2.s2.
from tbl t
cross apply
(
select s1 = left(col1, p - 1) 。
s2 = right(col1, len(col1) - p)
from (
--通過級聯charindex找到第三個'-'的位置。
select p = charindex('-'/span>, col1,
charindex('-', col1,
charindex('-', col1) 1) 1)
) p
) c1
cross 應用
(
select s1 = left(col2, p - 1) 。
s2 = right(col2, len(col2) - p)
from (
select p = charindex('-'/span>, col2)
) p
) c2
uj5u.com熱心網友回復:
在第一個子串中做了一點修改。為了獲得正確的長度,我使用了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熱心網友回復:
我可能會用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,'-'/span>,' 。 '),REPLACE(YT.Column2,'-','。'))R(Column1,Column2)
CROSS APPLY (VALUES(PARSENAME(R.Column1,4),PARSENAME(R.Column1,4) Column1,3),PARSENAME(R.Column1,2),PARSENAME(R. Column1,1),PARSENAME(R.Column2,3) Column2,2),PARSENAME(R.Column2,1))PN(C1P1,C1P2,C1P3,C1P4,C2P1,C2P2,C2P3)。
uj5u.com熱心網友回復:
WITH
測驗 AS
(
select '111-1001-0000-0000'/span> 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('-'/span>,col2) - 1
) as part2
from test
),
cte2 as
(
select
part1,
part2,
substring (
(
reverse(col1),
0,
charindex('-', reverse(col1))
) as part3,
子串
(
col2,
charindex('-',col2) 1,
len(col2)-charindex('-',col2) 1.
) as part4
from cte
)
select part1 '-'/span> part2 '-' part3 '-' part4
from cte2
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/307265.html
標籤:
上一篇:如何解決SSDT將我的CREATEVIEW陳述句中的隨機列標記為"模糊"的問題?
下一篇:<p>我正在做一個將以XML形式輸出的SQL查詢(MSSQL)。我需要協助處理一些具有相同標簽名稱的標簽,<code><CustomInteger>/code>
