+ -
当前位置:首页 → 问答吧 → TSQL挑战 - 第四题 - 20110702

TSQL挑战 - 第四题 - 20110702

时间:2011-07-02

来源:互联网

本帖最后由 rdcwayx 于 2011-07-02 10:57 编辑

看大家挺有兴趣这套挑战题,我就继续往下贴。

欢迎来做TSQL挑战题4

这次是个比较简单的挑战, 目的是找出合法的SSN号, 希望大家用各种不同的方法去解。

匹配的规则:

1. SSN格式为 XXX-XX-XXXX , X代表一个数字,只包括数字
2. 前三个数不能在734 和 749之间
3. 前三个数不能大于772
4. 前三个数(地区号码)不可以是 666
5. 三个数字组中,不允许全零。 比如 000-12-1234, 123-00-1234 or 123-12-0000 等都是不合法的
6. 数字 987-65-4320 到 987-65-4329 是不合法的。

这个数输入文件
  1. SET NOCOUNT ON;
  2. DECLARE @t TABLE (SSN VARCHAR(15))
  3. INSERT INTO @t (SSN) SELECT '123-45-6789'
  4. INSERT INTO @t (SSN) SELECT '123-45-67.89'
  5. INSERT INTO @t (SSN) SELECT 'ABC-12-3455'
  6. INSERT INTO @t (SSN) SELECT '123-45-67890'
  7. INSERT INTO @t (SSN) SELECT '123-456789'
  8. INSERT INTO @t (SSN) SELECT ' 123-45-6789'
  9. INSERT INTO @t (SSN) SELECT '12345-6789'
  10. INSERT INTO @t (SSN) SELECT '123456789'
  11. INSERT INTO @t (SSN) SELECT '123-12-1234'
复制代码
这个是希望的输出:
  1. SSN
  2. ---------------
  3. 123-45-6789
  4. 123-12-1234
复制代码

作者: rdcwayx   发布时间: 2011-07-02

本帖最后由 yinyuemi 于 2011-07-02 11:36 编辑
  1. 条件好多!
  2. echo "SET NOCOUNT ON;
  3. DECLARE @t TABLE (SSN VARCHAR(15))
  4. INSERT INTO @t (SSN) SELECT '123-45-6789'
  5. INSERT INTO @t (SSN) SELECT '123-45-67.89'
  6. INSERT INTO @t (SSN) SELECT 'ABC-12-3455'
  7. INSERT INTO @t (SSN) SELECT '123-45-67890'
  8. INSERT INTO @t (SSN) SELECT '123-456789'
  9. INSERT INTO @t (SSN) SELECT ' 123-45-6789'
  10. INSERT INTO @t (SSN) SELECT '12345-6789'
  11. INSERT INTO @t (SSN) SELECT '123456789'
  12. INSERT INTO @t (SSN) SELECT ''123-12-1234" |\
  13. awk --re-interval -F\' '
  14.    BEGIN{print "SSN:";print "-------"}
  15.    $2~/^[0-9]{3}-[0-9]{2}-[0-9]{4}$/&&split($2,SSN,"-")==3{
  16.       if(SSN[1]>772||(SSN[1]>734&&SSN[1]<749)||SSN[1]==666||SSN[1]*SSN[2]*SSN[3]==0||(SSN[1]SSN[2]SSN[3]>987654320&&SSN[1]SSN[2]SSN[3<987654329)){}
  17.       else{print $2}}'
  18. SSN:
  19. -------
  20. 123-45-6789
  21. 123-12-1234
复制代码

作者: yinyuemi   发布时间: 2011-07-02

支持!先占个座位啦:emn23:

作者: lionfun   发布时间: 2011-07-02

本帖最后由 昭襄王 于 2011-07-02 13:14 编辑

3. 前三个数不能大于772
6. 数字 987-65-4320 到 987-65-4329 是不合法的。
条件3造成了条件6多余啊。
还是我理解错了?

作者: 昭襄王   发布时间: 2011-07-02