首页 > 解决方案 > SQL 服务器子字符串

问题描述

请您帮忙获取以下子字符串。

我有像

1.1
1.10.1
1.2.2.1

预期输出(需要排除第二个点之后的数字)

1.1
1.10
1.2

标签: sqlsql-servertsql

解决方案


这是一种演示如何使用 CROSS APPLY 和一点 XML 的方法

例子

Declare @YourTable Table ([SomeCol] varchar(50))  Insert Into @YourTable Values 
 ('1.1')
,('1.10.1')
,('1.2.2.1')

Select A.* 
      ,NewValue=concat(
               XMLData.value('/x[1]','varchar(50)')
               ,'.'+XMLData.value('/x[2]','varchar(50)')
               )
 From  @YourTable A
 Cross Apply (  values (Cast('<x>' + replace(SomeCol,'.','</x><x>')+'</x>' as xml)) ) B(XMLData)

退货

SomeCol   NewValue
1.1       1.1
1.10.1    1.10
1.2.2.1   1.2

编辑 - 只是另一种选择parsename()

Select A.* 
      ,NewValue=reverse(parsename(reverse(SomeCol),2)
              +'.'
              +parsename(reverse(SomeCol),1)
              )
From  @YourTable A

推荐阅读