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.

これはどのように行うことができますか?

4

2 に答える 2

1

これを SQL でのみ解決し、呼び出し元のアプリケーションでは解決したくない場合、$ORDERNUMBER の最初の 2 文字が常に 'TK' であることがわかっている場合、$ORDERNUMBER の部分文字列を3 番目の文字...つまり

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 に答える