繁体   English   中英

提取 REGEXP 子字符串 SQL Server

[英]Extract REGEXP Substring SQL Server

我想从此查询中提取特定的数值...

列:名称 此示例的四行:

  • 1/2 Product1 some_description 1200 GR 更多数据... (UND)
  • 1/4 Product2 some_description 2400G更多数据(KG更多数据)
  • Product3 some_description 2200 GRS 更多数据...
  • 1/4 Product4 some_description 1800GR 更多数据 UND...

我只想要整数值。 我想要查询:

  • 1200
  • 2400
  • 2200
  • 1800

模式是:

  • [0-9]{4} G
  • [0-9]{4}GR
  • [0-9]{4} GRS

我如何在 SQL 查询中使用此正则表达式来解析属性值?

SELECT FROM myTable SUBSTRING(name, (PATINDEX('%[0-9]%', [name])),4) as peso

这会提取一些值,但顺序不正确...我认为我可以将 LEFT 的长度应用到整数值,但我不知道如何解决它。

你很接近。 在 SQL Server 中,最简单的数据处理方法是:

select left(name, 4) as peso
from mytable t;

也就是说,前四个字符似乎是你想要的。

如果前四个字符可能不都是数字,那么您要使用patindex()

select left(name, patindex('%[^0-9]%', name + ' ') - 1) as peso
from myTable t;
CONVERT(
INT, 
(REPLACE(
    SUBSTRING(
        nome,
        (
            PATINDEX(
                '%[0-9]%',
                REPLACE(
                    REPLACE(
                        nome,
                        '1/2',
                        ''
                    ),
                    '1/4',
                    ''
                )
            )
        ),
        4
    ),
    'G',
    ''
))) as pesoTotal

这解决了这个问题,谢谢。

如果它们SUBSTRING(name, PATINDEX('%[0-9][0-9][0-9][0-9][G ][GR]%', name),4)使用相同的模式。 会得到一些误报(“1400 Rhinos”、“3216GGG”等)。

暂无
暂无

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

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