将SQL语句转换为正则表达式 - 可以这样做吗?

时间:2016-03-08 23:44:05

标签: sql regex

我需要将以下SQL语句转换为正则表达式。

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

背景:我将银行交易文件(BAI2文件)放入系统进行交易匹配(将银行交易与GL交易相匹配)。为了使这些事务匹配,要匹配的字段必须完全相同。但是,在总帐中,$500检查可能会输入为-500(因为公用事业帐户的现金帐户减少$500),但BAI个文件存储所有金额均为正值。我需要使用银行的交易类型代码来确定金额是借方还是贷方(参考GL)。

我有SQL开发人员可以使用SQL来做到这一点,但是我用来执行BAI数据操作的工具需要将逻辑输入为正则表达式。

任何人都可以协助将适当的标志(正面或负面)应用于银行交易的这些金额吗?甚至可以这样做吗?我是一张新的海报,所以请忍无知,如果我能提供进一步的细节/信息,请告诉我。

2 个答案:

答案 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;。

首先在样本数据上进行测试!