我有下面的样本数据,我正在try 提取字符串中的最后一个数字.我有以下几点,这让我在一定程度上做到了这一点,但我不确定如何在不是最终结论的地方获得值.

right(TextDescription, patindex('%[^0-9]%',reverse(TextDescription)) - 1)

结果应该是:

ID code
1 10015662
2 100040344
3 10015370
4 NULL
5 400337

样本数据

Create Table #TestData
(
    ID int,
    TextDescription varchar(100)
)

insert into #TestData Values (1,'Data From JOE BLOGGS 10015662 tree 10015662')
insert into #TestData Values (2,'Fast Data From JOHN SMITH 10004034 MARY SMITH 100040344 plant')
insert into #TestData Values (3,'Data In 10015370 pot JONES')
insert into #TestData Values (4,'Fast Data From LEE tree')
insert into #TestData Values (5,'Direct Data 106600 JANE GREEN 400337')

推荐答案

只是另一种 Select ,使用一点JSON将字符串转换为数组,[key]将保持顺序.

Select A.ID 
      ,B.Value
 From  #TestData A
 Outer Apply (
                Select top 1 Value
                 From  OpenJSON( '["'+replace(string_escape(TextDescription,'json'),' ','","')+'"]' )
                 Where try_convert(int,Value) is not null
                 Order by [key] Desc
             ) B

Results

ID  Value
1   10015662
2   100040344
3   10015370
4   NULL
5   400337

Sql相关问答推荐

如何重用表值用户定义函数调用的结果?

无法找到正确的SQL查询需求

SQL查询每个客户的最新条目

在请求结束之前,PostgreSQL不会考虑使用中的删除

如何根据计数和分组获取订单总数

如何在PostgreSQL中对第1,1,1,1,2,2,2,2行进行编号

如何在Presto中将多个列合并到一个数组中

每组显示一行(表1中的分组值),表2中的不同列表用逗号分隔

基于多列比较连接两个表

查找表中特定值的上次更新日期

Select 列组(按同一表格中的另一列分组)Laravel 10

连续天跟踪购买情况(将标记返回到另一列?)

在 SQL Server 中合并两个 XML 列

POSTGRES to_timestamp() 假定 UTC 字符串为本地时间

SQL Server中使用min()和max()从选定的特定值id表中删除不必要的时间

使用SQLAlchemy和Postgres数据库创建新行时,为什么我的创建日期比更新日期晚?

带有数组输入参数的Snowflake UDF优化

计数时如何为所有时间间隔返回 0 而不是什么都不返回

如何在 SQL Server 中参数化 Select top 'n'

使用 json_agg 从 SQL 查询获取 [null] 响应