使用表达式确定字符串是否以字母开头

时间:2013-10-07 16:07:59

标签: sql-server ssis

我需要一些帮助在SSIS Expression中构建一个条件语句,这将允许我过滤掉一个必须始终以两个字母字符开头的9位varchar字段。

模式应始终遵循:AA0000000

我的目标是让数据流达到条件拆分并将非法记录转储到转储文件中,以便以后进行质量检查。

示例:

  • AQ1234567< - Legal
  • PA9876543< - Legal
  • RR1133456< - Legal
  • K12345G65< - Illegal
  • 098874312< - Illegal

我对其他人必须处理此过滤器的方法持开放态度。我的数据来自Excel文档,不幸的是在点击我的加载过程之前没有预先验证数据。

1 个答案:

答案 0 :(得分:4)

将我的解决方案限制在表达式空间中,您正在寻找的工具是CODEPOINT。它返回它找到的第一个字符的整数值。 使用我方便的花花公子ASCII表,我需要在源列中的第一个和第二个字符上调用CodePoint并测试值是否在A-Z的字符范围之间。

这将测试第一个字符CODEPOINT(Src),这是第二个字符CODEPOINT(SUBSTRING(Src,2,1))的测试

将这种逻辑放在一起会导致这种丑陋的表达

(CODEPOINT(SUBSTRING(Src,2,1)) >= 65 
    && CODEPOINT(SUBSTRING(Src,2,1)) < 91) 
&& (CODEPOINT(Src) >= 65 
    && CODEPOINT(Src) < 91) ? true : false

enter image description here

我的经验法则是,当我的表情从屏幕上滚动时,我更喜欢将逻辑放入脚本组件中。或者我会将其分解为多个派生列组件,因为它使维护更容易。