我们有一个程序可以从我们用于发货的数据库中提取信息。它的工作方式是使用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
格式。
如何做到这一点?
答案 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