2012-07-25 63 views
0

我有一个迫切需要简化的查询。下面是该查询的一部分:简化左/替换查询

SELECT 
    LEFT(MLIS.REQUESTOR_FIRST_NAME, CharIndex(' ', MLIS.REQUESTOR_FIRST_NAME + ' ') - 1) 

    , CharIndex(' ', LEFT(MLIS.REQUESTOR_FIRST_NAME, CharIndex(' ', MLIS.REQUESTOR_FIRST_NAME + ' ') - 1) + ' ') - 1) 

    +REPLICATE(' ',25),25)+ 
    LEFT(' '+REPLICATE(' ',20),20)+ 
    LEFT(

    LEFT(

    LEFT(MLIS.REQUESTOR_LAST_NAME, CharIndex(',', MLIS.REQUESTOR_LAST_NAME + ',') - 1) 

    , CharIndex(',', LEFT(MLIS.REQUESTOR_LAST_NAME, CharIndex(',', MLIS.REQUESTOR_LAST_NAME + ',') - 1) + ',') - 1) 

我做replicates的原因是因为我建立一个固定长度的字符串。每列需要是固定的长度。

除了上面的查询,为MLIS.REQUESTOR_FIRST_NAMEMLIS.REQUESTOR_LAST_NAME每次出现,我需要做的:

REPLACE(REPLACE(MLIS.REQUESTOR_FIRST_NAME,', MD',''),',MD','') 

REPLACE(REPLACE(MLIS.REQUESTOR_LAST_NAME,', MD',''),',MD','') 

如何在查询中包含这些REPLACES和简化整件事情?

非常感谢您的指导和善意帮助。

回答

1

选择一个子查询的普通位...(你必须多一点)

SELECT 
    LEFT(REQUESTOR_FIRST_NAME, fname_idx - 1) 
    , CharIndex(' ', LEFT(MLIS.REQUESTOR_FIRST_NAME, fname_idx - 1) + ' ') - 1) 
.. 
FROM (select CharIndex(' ', MLIS.REQUESTOR_FIRST_NAME + ' ') fname_idx, REQUESTOR_FIRST_NAME from... 
1

使用子查询将与语法帮助。另外,您可以将其转换为CHAR()以将字符串填充并截断为给定的长度。

我认为有以下你想要做什么:

SELECT cast(fname as char(25)) + ' ' + cast(lname as char(25)) 
from (select replace(replace(LEFT(MLIS.REQUESTOR_FIRST_NAME, 
            CharIndex(' ', MLIS.REQUESTOR_FIRST_NAME + ' ') - 1 
           ), 
          ',MD', ''), 
        ', MD', '') as fname, 
      replace(relpace(left(MLIS.REQUESTOR_LAST_NAME, 
            CharIndex(',', MLIS.REQUESTOR_LAST_NAME + ',') - 1), 
            CharIndex(',', LEFT(MLIS.REQUESTOR_LAST_NAME, 
                 CharIndex(',', MLIS.REQUESTOR_LAST_NAME + ',') - 1) + ',' 
                   ) - 1 
           ), 
          ',MD', ''), 
        ', MD', '') as lname 

然而,就很难按照原来的查询,并有可能是一个语法错误。此查询旨在为您提供解决问题的一些指导。我还会在连接之后进行强制转换,以确保最终的字符串长度合适。