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 以不包含字母。但是程序确实指定最后一行必须是 format WHERE [field name]=$ORDERNUMBER

如何才能做到这一点?

4

2 回答 2

1

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

WHERE RXFILL_ID=SUBSTRING($ORDERNUMBER, 2).

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

如果您分享有关设置 $ORDERNUMBER 的调用应用程序的更多信息,我相信在此处进行更改会更好。

于 2012-07-12T18:55:50.057 回答
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

于 2012-07-12T19:48:57.173 回答