首页 > 解决方案 > 从字符串中分离数值

问题描述

我遇到了一个问题,我需要将以下内容分开BPO007以显示BPO007. 在某些情况下,另一个示例是GFE0035,我仍然需要从字符中拆分数值。

当我执行以下操作时select isnumeric('BPO007'),结果为 0,这是正确的,但是,我不确定如何将它们彼此分开。

我看过这个链接,但它并没有真正回答我的问题。

我需要上述拆分用于触发器中的单独验证目的。

我将如何开发这样的东西?

先感谢您。

标签: sql-servertsql

解决方案


正如之前的评论中所说:

关于你的问题我将如何开发这样的东西?
不要在同一列中存储两条信息(请阅读1.NF)。您应该在数据库中为BPO007(或者更确切地说是整数7)保留单独的列。然后在输出中需要时
使用一些字符串方法来计算BPO007 。

只是为了不让你一个人在雨中。

DECLARE @tbl TABLE(YourColumn VARCHAR(100));
INSERT INTO @tbl VALUES('BPO007'),('GFE0035');

SELECT YourColumn,pos
      ,LEFT(YourColumn,pos) AS CharPart
      ,CAST(SUBSTRING(YourColumn,pos+1,1000) AS INT) AS NumPart
FROM @tbl 
CROSS APPLY(SELECT PATINDEX('%[0-9]%',YourColumn)-1) AS A(pos);

将返回

YourColumn  pos CharPart    NumPart
BPO007      3   BPO         7
GFE0035     3   GFE         35

提示:我在CROSS APPLY这里使用 a 来计算第一个数字字符的位置,然后pos像使用变量一样在实际查询中使用。否则PATINDEX必须重复...


推荐阅读