提取特定字符的字符串 SQL Server

问题描述 投票:0回答:1

尝试从 sql server 中的 varchar 字段中提取特定字符串。然后我只需要该字符串的最后 4 位数字。尝试过 substring 和 patindex 但不知道如何获取最后 4 位数字。这是一次尝试,但它只给了我文本的第一部分。

SUBSTRING([column], (PATINDEX('%ID0%-[0-9][0-9][0-9][0-9][0-9]%',[column])),9) 

下面的示例数据

Brian Larry, Hays Hill XX, ID007370, Option code - 0123 4567, AAA - XX
ID007366 - Dave Jones - XX - Option Code 0121 9999
ID00 7120  Brian Smith XX  Branded company
ID07113 Gary Barnes  - LLL 0123 9111 AAA LLL
ID00 7120  Charles Old XX   Recall operation
ID0007439 - Kerry Hill - Maidstone XX - Option Code 0124 234 BBB XX
ID006817 Paul George Jackson 1234 8464 AAA Recall operation

所以我需要提取 ID00000 号码,但只返回最后 4 位数字。因此,对于 ID007370,我只想返回 7370。ID 号的长度也可以不同。

sql sql-server substring patindex
1个回答
0
投票

类似这样的东西看起来很有效:

SELECT  RIGHT(SUBSTRING(string_nonspace, y.start, PATINDEX('%[^0-9]%', STUFF(string_nonspace, 1, start + 1, '')) + 1), 4)
FROM    (
    VALUES  (N'Brian Larry, Hays Hill XX, ID007370, Option code - 0123 4567, AAA - XX')
    ,   (N'ID007366 - Dave Jones - XX - Option Code 0121 9999')
    ,   (N'ID00 7120  Brian Smith XX  Branded company')
    ,   (N'ID07113 Gary Barnes  - LLL 0123 9111 AAA LLL')
    ,   (N'ID00 7120  Charles Old XX   Recall operation')
    ,   (N'ID0007439 - Kerry Hill - Maidstone XX - Option Code 0124 234 BBB XX')
    ,   (N'ID006817 Paul George Jackson 1234 8464 AAA Recall operation')
) t (col1)
CROSS APPLY (
        SELECT  replace(col1, ' ', '') AS string_nonspace
    ) x
CROSS APPLY (
        SELECT  PATINDEX('%ID[0-9]%', string_nonspace) AS start
    ) y

输出:

身份证 字符串_非空格
7370 BrianLarry,HaysHillXX,ID007370,选项代码-01234567,AAA-XX
7366 ID007366-DaveJones-XX-选项代码01219999
7120 ID007120BrianSmithXX品牌公司
7113 ID07113GaryBarnes-LLL01239111AAALLL
7120 ID007120CharlesOldXX召回操作
7439 ID0007439-KerryHill-MaidstoneXX-选项代码0124234BBBXX
6817 ID006817PaulGeorgeJackson12348464AAA召回操作

我删除空格,然后通过

PATINDEX('%ID[0-9]%'
找到起始位置。然后我剪辑字符串,以便删除 ID 部分,然后搜索第一个非数字值。完成后,您可以在 start 和第一个非数字值之间执行 SUBSTRING。最后,
RIGHT(..., 4)
获取最后四个字符。

当然,这段代码会在许多格式错误的字符串上失败,但它们会中断,数据内有点“鼓风机”

© www.soinside.com 2019 - 2024. All rights reserved.