2012-07-25 99 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 

然而,就很難按照原來的查詢,並有可能是一個語法錯誤。此查詢旨在爲您提供解決問題的一些指導。我還會在連接之後進行強制轉換,以確保最終的字符串長度合適。