2016-03-08 52 views
0

我需要將下面的SQL語句轉換爲正則表達式。將SQL語句轉換爲正則表達式 - 可以完成嗎?

CASE WHEN TypeCode >= 400 
     AND TypeCode < 700 
    THEN Amt * -1 
    ELSE Amt 
END 

背景:我把銀行的交易文件(BAI2文件)到系統的事務匹配(匹配的銀行交易的總帳交易)。爲了使這些交易匹配,匹配的字段必須完全相同。但是,GL a $500支票可能會輸入爲-500(因爲公用賬單的公司現金賬戶將減少$500),但BAI文件將所有金額存儲爲正值。我需要使用銀行的交易類型代碼來確定金額是借方還是貸方(參考總帳)。

我有SQL開發人員可以使用SQL來做到這一點,但是我用來做BAI數據操作的這個工具需要將邏輯作爲正則表達式輸入。

任何人都可以協助將適當的標牌(正面或負面)用於銀行交易的這些金額嗎?這甚至可以完成?我是一個新的海報,所以請忍受任何無知,讓我知道,如果我可以提供進一步的細節/信息。

+2

正則表達式用於匹配模式,不修改數值。你在那個聲明中究竟想要轉換什麼? – Default

+1

什麼是您的SQL RDBM? –

+0

我試圖用399-700之間的交易代碼(TypeCode)進行交易,並將金額(Amt)轉換爲負值。 我不一定匹配模式;就像你說的那樣修改數據。這甚至可以用正則表達式來完成嗎? – CluelessJeremy

回答

0

也許試試這個:

^[4-6][0-9]{2}$ 

這將查找號碼400-699(含)之間。

編輯:將\ d更改爲[0-9],因爲\ d也可能包含奇怪的字符。

+0

不會'\ d \ d'變短嗎? – Default

+0

其實我認爲^^ [4-6] [0-9] {2}會更好,因爲\ d太籠統。回答編輯。 – kaisquared

+0

* \ d是我知道的[0-9] *的簡稱,所以我不確定「太一般」。你能詳細說明一下嗎? – Default

0

我覺得你的痛苦...沒有銀行變得容易。 '\ d'的意思是'[0-9]','\ d'更短。 銀行在欺騙羣衆方面做得很好,「信用」這個詞很好,'借方'很差(我認爲這是他們的意圖......)。 除非您知道資金流向哪個方向,否則您無法知道該值應爲負值還是負值。 如果表中有INWARDS/RECEIVED資金和OUTWARDS/PAID資金的單獨列,則您不需要積極的負面指示。 但是,如果所有AMOUNTS中只有一列,無論是移入INTO還是從賬戶中取出,那麼您肯定需要SIGNED VALUES(正/負指示)。

「 - $ nnn」或「($ nnn)」,有或沒有「$」。

如果你有兩個COLUMN表(PAID IN和PAID OUT),那麼只需使用沒有SIGNS的「$ nnn」即可。

$value =~ s/\$/-\$/; 

以上是一個Perl的例子: - 「$」使用 如果你有一個單列表,那麼你可以替換「$」着。 '\ $'表示「文字標識」(即美元符號)。

要匹配之間的任意值,包括399-700使用以下正則表達式:

^(399|[4-6]\d\d|700)$ 

應該比賽正是你想要的。

所以,你可以這樣做(在Perl):

if ($TypeCode =~ m/^([4-6]\d\d|399|700)$/) { # if code matches pattern 
    # -EITHER- 
    $Amount=~ s/\$/-\$/; # prepend "-" to "$" 
    # -OR- 
    $Amount=~ s/\$/-/;  # replace "$" with "-" 
} 

的「^」(克拉 - 行或字符串的開始)和「$」(印記 - 行或字符串的結尾)周圍的正則表達式阻止它匹配4個或更多數字的任何東西,比如3399或47421. 我將'[4-6] \ d \ d'移到前面,因爲它匹配302個可能代碼中的300個(並且我不知道它可以節省幾毫秒的處理)。

'[4-6]'='[456]',表示從'4'到'6'的數字。

首先對樣本數據進行測試!

相關問題