一个字段fnumer 值如下
aa.bb.cc  abc.a.c  ccccc.bac.ffffff我想截取fnumer
1.第一点前面的字符串
2.第一个点到第二个点之间的字符串
3.第3个点后面的字符串
-由于长度会不一样,请问怎么截取

解决方案 »

  1.   

    DECLARE @i TABLE (fnumber NVARCHAR(100))INSERT INTO @i(fnumber)
    SELECT 'aa.bb.cc'
    UNION ALL
    SELECT 'abc.a.c'
    UNION ALL
    SELECT 'ccccc.bac.ffffff'SELECT PARSENAME(fnumber,3),PARSENAME(fnumber,2),PARSENAME(fnumber,1) FROM @i
    /*
    (无列名) (无列名) (无列名)
    aa bb cc
    abc a c
    ccccc bac ffffff*/
      

  2.   

    这个方法不错 但是是我没写完整 字符串可能有这种情况 1.只有一个点 2.只有2个点 3.有3个点DECLARE @i TABLE (fnumber NVARCHAR(100))INSERT INTO @i(fnumber)
    SELECT 'aa.bb.cc'
    UNION ALL
    SELECT 'abc.a.c'
    UNION ALL
    SELECT 'ccccc.bac.ffffff'
    UNION ALL
    SELECT 'aaa.bbb.ccc.ddd'
    UNION ALL
    SELECT 'bbb.ddd'SELECT ISNULL(PARSENAME(fnumber,4),PARSENAME(fnumber,3)),
    ISNULL(PARSENAME(fnumber,3),PARSENAME(fnumber,2)),
    ISNULL(PARSENAME(fnumber,2),PARSENAME(fnumber,1)) 
    FROM @i  --类似这样做个判断即可/*
    (无列名) (无列名) (无列名)
    aa aa bb
    abc abc a
    ccccc ccccc bac
    aaa bbb ccc
    NULL bbb bbb*/