我有一个名为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个,并在这些行中添加前缀字段和后缀字段或其他内容。特别是如果这些是"智能零件号"或类似的东西,您将能够更容易地按语法进行分组。