我有下面的示例数据,我试图提取字符串中的最后一个数字,我有下面的示例,这让我有了一部分的方法,但我不知道如何获得它不是最后一个单词的值。
right(TextDescription, patindex('%[^0-9]%',reverse(TextDescription)) - 1)
结果应为:
| 识别号|电码|
| - ------|- ------|
| 1个|小行星1001|
| 第二章|小行星100040344|
| 三个|小行星10015370|
| 四个|零|
| 五个|小行星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')
5条答案
按热度按时间xtupzzrd1#
这是另一个使用JSON的选项,它将字符串转换为数组,[key]将保持序列。
wgxvkvu92#
下面的代码将定位最后一个数字,在该点修剪字符串,找到前面的非数字,然后执行另一次修剪以获得最终结果。正如在您的原始帖子中一样,计算是在反转的字符串上完成的,以适应
LASTPATINDEX()
函数的缺失。CROSS APPLY
用于构建中间结果并避免子表达式的重复。这将处理各种形式,而不仅仅是空格分隔的值。
参见this db<>fiddle。
bq9c1y663#
如果您感兴趣的值总是出现在末尾,并且总是以非数字开头,则可以将
SUBSTRING
与以下语句配合使用:检查here演示。
blpfk2vs4#
请尝试以下利用XML和XQuery的解决方案。
值得注意的要点:
[last()]
正在为我们提供最后一个INTEGER值。| 识别号|文本描述|电码|
| - ------|- ------|- ------|
| 1个|数据来自JOE博客10015662树10015662|小行星1001|
| 第二章|来自约翰·史密斯10004034玛丽·史密斯100040344工厂的快速数据|小行星100040344|
| 三个|10015370罐JONES中的数据|小行星10015370|
| 四个|LEE树快速数据|零|
| 五个|直接数据106600简·格林400337|小行星400337|
92dk7w1h5#
ExtractInteger
函数将只获取数字和空格,下面的select将把最后一个字作为数字: