简化左/替换查询
问题描述:
我有一个迫切需要简化的查询。下面是该查询的一部分:简化左/替换查询
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_NAME
和MLIS.REQUESTOR_LAST_NAME
每次出现,我需要做的:
REPLACE(REPLACE(MLIS.REQUESTOR_FIRST_NAME,', MD',''),',MD','')
和
REPLACE(REPLACE(MLIS.REQUESTOR_LAST_NAME,', MD',''),',MD','')
如何在查询中包含这些REPLACES
和简化整件事情?
非常感谢您的指导和善意帮助。
答
选择一个子查询的普通位...(你必须多一点)
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...
答
使用子查询将与语法帮助。另外,您可以将其转换为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
然而,就很难按照原来的查询,并有可能是一个语法错误。此查询旨在为您提供解决问题的一些指导。我还会在连接之后进行强制转换,以确保最终的字符串长度合适。