2012-07-12 75 views
2

我们有一个程序可以从我们用于装运的数据库中提取信息。它的工作方式是使用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

哪个RDBMS是这个呢? – 2012-07-12 18:52:01

回答

1

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

WHERE RXFILL_ID=SUBSTRING($ORDERNUMBER, 2). 

这句法可能不准确,因为你没有透露你的DBMS类型和各DBMS实现在任何他们想要的方式串。

如果您共享有关调用应用程序的更多信息(设置$ ORDERNUMBER),我相信在那里进行更改会更好。

+0

就像一个笔记,这个问题没有指定数据库。在某些数据库中,函数是SUBSTR(),在某些数据库中它需要第三个参数(所以SUBSTR(xxx,xxx,1000)将起作用)。 – 2012-07-12 18:58:50

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 

检测过 SELECT SelectNumbersFromString('abc3deef5ff6') will return 356

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