我需要将以下SQL语句转换为正则表达式。
CASE WHEN TypeCode >= 400
AND TypeCode < 700
THEN Amt * -1
ELSE Amt
END
背景:我将银行交易文件(BAI2文件)放入系统进行交易匹配(将银行交易与GL交易相匹配)。为了使这些事务匹配,要匹配的字段必须完全相同。但是,在总帐中,$500
检查可能会输入为-500
(因为公用事业帐户的现金帐户减少$500
),但BAI
个文件存储所有金额均为正值。我需要使用银行的交易类型代码来确定金额是借方还是贷方(参考GL)。
我有SQL开发人员可以使用SQL来做到这一点,但是我用来执行BAI
数据操作的工具需要将逻辑输入为正则表达式。
任何人都可以协助将适当的标志(正面或负面)应用于银行交易的这些金额吗?甚至可以这样做吗?我是一张新的海报,所以请忍无知,如果我能提供进一步的细节/信息,请告诉我。
答案 0 :(得分:0)
也许试试这个:
^[4-6][0-9]{2}$
这将寻找400-699之间的数字。
编辑:将\ d更改为[0-9],因为\ d也可能包含奇怪的字符。
答案 1 :(得分:0)
我感到你的痛苦......没有银行让事情变得简单。 &#39; \ d&#39;完全意味着&#39; [0-9]&#39;,&#39; \ d&#39;更短。 银行已经做了很好的工作来愚弄群众“信用”这个词。很好,并且“借记”#39;是坏事(我认为这是他们的意图......)。 除非您知道资金流向哪个方向,否则您无法知道该值是负还是正。 如果该表有INWARDS / RECEIVED资金和OUTWARDS / PAID资金的单独列,那么您不需要正面和负面指示。 但是,如果所有AMOUNTS表中只有一列,无论是移入INTO还是从账户中取出,那么您肯定需要签名价值(正/负指示)。
要么&#34; - $ nnn&#34;或&#34;($ nnn)&#34;,有或没有&#34; $&#34;。
如果您有两个COLUMN表(PAID IN和PAID OUT),那么只需使用&#34; $ nnn&#34;没有SIGNS。 如果您有一个SINGLE COLUMN表,那么您可以替换&#34; $&#34;用&#34; - $&#34;使用:
$value =~ s/\$/-\$/;
以上是一个perl示例。 &#39; \ $&#39;意味着&#34;文字SIGIL&#34; (即美元符号)。
要匹配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 "-"
}
&#39; ^&#39; (克拉 - 行或字符串的开头)和&#39; $&#39;正则表达式周围的(sigil - 行尾或字符串)阻止它匹配4位或更多位的任何数字,如3399或47421。 我感动了[4-6] \ d \ d&#39;在前面,因为它将匹配302个可能的代码中的300个(并且,我不知道,它可以节省几毫秒的处理)。
&#39; [4-6]&#39; =&#39; [456]&#39;,表示来自&#39; 4&#39;的数字。到&#39; 6&#39;。
首先在样本数据上进行测试!