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_NAMEandMLIS.REQUESTOR_LAST_NAME我需要做的事情:

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

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

我如何将这些包含REPLACES在查询中并简化整个事情?

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

4

2 回答 2

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...
于 2012-07-25T16:19:44.570 回答
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

但是,很难遵循原始查询,并且可能存在语法错误。此查询旨在为您提供解决问题的一些指导。我还会在连接之后进行强制转换,以确保最终字符串的长度正确。

于 2012-07-25T18:23:51.453 回答