仅选择字符串中的数字

时间:2012-07-12 18:50:02

标签: sql

我们有一个程序可以从我们用于发货的数据库中提取信息。它的工作方式是使用ODBC驱动程序从我们的数据库中提取,这样当我们在发货程序中输入“订单号5”时,它还会提取匹配的地址,电话号码等。

问题是数据库仅包含订单的编号,但是包含我们用于库存管理的数据库的程序使用TK123456格式的订单编号打印我们的标签。我需要弄清楚如何让SQL在输入时将订单号解释为数字,所以基本上从一开始就切断了TK。

SELECT RXFILL.RXFILL_ID, RXMAIN.RX_NUMBER, PATIENT.FIRSTNAME, PATIENT.LASTNAME,
     SHIPADDRESS1, SHIPADDRESS2, SHIPCITY, SHIPSTATE, SHIPZIP, EMAIL
 FROM RXFILL 
 LEFT JOIN RXMAIN ON RXFILL.RXMAIN_ID = RXMAIN.RXMAIN_ID
 LEFT JOIN PATIENT ON RXMAIN.PATIENT_ID = PATIENT.PATIENT_ID
 WHERE RXFILL_ID=$ORDERNUMBER

如果我理解正确的话,$ ORDERNUMBER需要调整为不包括字母。但是,程序确实指定最后一行必须采用WHERE [field name]=$ORDERNUMBER格式。

如何做到这一点?

2 个答案:

答案 0 :(得分:1)

如果您只希望在SQL中而不是在调用应用程序中解决此问题,并且您知道$ ORDERNUMBER的前两个字符将始终是' TK',那么您可以通过以下方式轻松解决从第三个字符开始获取$ ORDERNUMBER的子字符串...即

WHERE RXFILL_ID=SUBSTRING($ORDERNUMBER, 2).

这种语法可能不准确,因为您没有透露您的DBMS类型,并且每个DBMS都以他们想要的任何方式实现SUBSTRING。

如果您分享有关设置$ ORDERNUMBER的致电应用程序的更多信息,我确定在那里进行更改会更好。

答案 1 :(得分:0)

我已为此编写了一个函数。

CREATE Function SelectNumbersFromString(@str varchar(max))
Returns varchar(max) as 
BEGIN

Declare @cchk char(5);
Declare @len  int ;
Declare @aschr int;

SET @len = ( SElect len(@str) );
Declare @count int
SET @count = 1

DECLARE @ans varchar(max)
SET @ans = ''

While @count <= @len
BEGIN
    SET @cchk = ( select Substring(@str,@count,1) );    
    SET @aschr = ( select ASCII(@cchk) );
    IF  @aschr in ( 49,50,51,52,53,54,55,56,57,58 )
    BEGIN   
        SET @ans = @ans + CHAR(@aschr)          
    END 
    SET @count = @count + 1;
END

RETURN @ans;
END

<强> TESTED SELECT SelectNumbersFromString('abc3deef5ff6') will return 356

来自http://wfjanjua.blogspot.com/2012/07/add-numbers-from-stringvarchar-in-tsql.html