繁体   English   中英

在SQL Server 2008中如何在选择中使用反向和拆分?

[英]How to work with reverse and split in a select in SQL Server 2008?

我发现以下查询对于我正在处理的应用程序非常有用。 但是,我想替换表中select的值。

WITH data AS
(
    select Value, REVERSE(Value) AS ReverseValue from (values
        ('texttext/21/812/21a'), ('texttext/6/163/38a'), ('texttext/53/7a/a2'), ('text/t/e/xt/53/7a/a2')
    )t(Value)
), split AS
(
    select 
        Value, ReverseValue, 
        reverse(substring(ReverseValue, 1, P1.Pos - 1)) AS Forth,
        reverse(substring(ReverseValue, P1.Pos + 1, P2.Pos - P1.Pos - 1)) AS Third,
        reverse(substring(ReverseValue, P2.Pos + 1, P3.Pos - P2.Pos - 1)) AS Second,
        reverse(substring(ReverseValue, p3.Pos + 1, len(ReverseValue))) AS First
    from data       
        cross apply (select (charindex('/', ReverseValue))) as P1(Pos)
        cross apply (select (charindex('/', ReverseValue, P1.Pos+1))) as P2(Pos)
        cross apply (select (charindex('/', ReverseValue, P2.Pos+1))) as P3(Pos)
)
select Value, First + '-' + Forth + Third + Second AS NewValue from split

因此,我想要的不是(values ('texttext/21/812/21a') (...)而是类似(select myfield from myutable)东西。

只需替换第一个CTE中的值即可:

WITH data AS (
    select myfield, REVERSE(myfield) AS ReverseValue
    from mytable
   ),
   . . .

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM