sql server语言 - 我如何从nvarchar获得一个数字



我有一个名为Foo的表,有一个名为Bar的列,这是一个nvarchar

Bar的值如下所示:Prefix + Number

例子:

Bar = 'abc123'
Bar = 'a1bc23'

我想选择Bar的Number部分(后半部分),它将是:

123 if Bar = 'abc123'
23 if Bar = 'a1bc23'

假设前缀不以数字结尾,我如何获得Bar的数字部分?

指出:

  • 我们不知道前缀
  • 的长度无论是T-SQL还是LINQ解决方案都可以。

提前感谢您的宝贵时间。

WITH T(C)
AS
(
SELECT 'a1bc23' UNION ALL 
SELECT 'abc123' UNION ALL 
SELECT 'FOO'    UNION ALL 
SELECT  NULL    UNION ALL 
SELECT '456' 
)
SELECT 
      CASE WHEN C LIKE '%[0-9]' 
           THEN CASE WHEN C LIKE '%[^0-9]%' 
                     THEN RIGHT(C,PATINDEX('%[^0-9]%', REVERSE(C))-1) 
                     ELSE C
                 END
      END AS Number
FROM T 

返回
Number
------
23
123
NULL
NULL
456

Martin给出了一个很好的答案。虽然我确信这可以工作,但它可能是一个昂贵的调用,因为您正在对字符串字段执行几个操作。如果您有1000或数百万行,那么这可能不是性能。

我可能会建议看看你为什么需要这样做,看看你是否可以格式化你的数据,使其更容易处理这种情况。将一个字段拆分为2个,并在这些行中添加前缀字段和后缀字段或其他内容。特别是如果这些是"智能零件号"或类似的东西,您将能够更容易地按语法进行分组。

相关内容

  • 没有找到相关文章

最新更新