2016-05-02 26 views
2

我需要檢查列中間名是否包含任何值。 如果它是空的,那麼它不應該與名稱連接。如何檢查選擇查詢中的列中的值

Select 
    .. 
    Agent, 
    FirstName + ' ' MiddleName + ' ' + LastName as Name, 
    ... 
    from tbSystemUser 

在上面的查詢中,如果MiddleName爲空,則在Name中添加兩次空格。

+0

將'Middlename'設爲NULL# –

回答

3

你可以在下面使用CASE expressionCOALESCE

select 
.. 
Agent, 
case when coalesce(MiddleName, '') = '' then FirstName + ' ' + LastName 
     else FirstName + ' ' + MiddleName + ' ' + LastName 
end as Name, 
... 
from tbSystemUser 
+1

添加+1來處理null,並通過合併來清空。 – Arulkumar

+0

我寧願有一個禁止空名稱的約束。 (強制NULL)。 – jarlh

1

您可以使用case語句

Select 
    .. 
    Agent, 
    Case MiddleName 
    when ' ' then 
    FirstName + ' ' + LastName 
    else 
    FirstName + ' ' MiddleName + ' ' + LastName 
    end 
    as Name, 
    ... 
    from tbSystemUser 

OR

Select 
     .. 
     Agent, 
     Case 
     when MiddleName = ' ' then 
     FirstName + ' ' + LastName 
     else 
     FirstName + ' ' MiddleName + ' ' + LastName 
     end 
     as Name, 
     ... 
     from tbSystemUser 
+0

語法錯誤。順便說一句,你想要一個案例表達式,而不是案例陳述。 – jarlh

+0

它在'FirstName'附近引發不正確的語法。 – Nida

+0

@Nida檢查我編輯的答案 – Sachu

1
Select 
.. 
Agent, 
FirstName + CASE WHEN MiddleName is not null THEN ' ' + MiddleName else '' END + ' ' + LastName as Name, 
... 
from tbSystemUser 
+0

和以前一樣的問題。將'+'''移到case表達式中。 (並調整語法錯誤。) – jarlh

+0

請現在檢查 –

+0

更好,但仍然語法錯誤。 (提示:在案件之前。) – jarlh

1

使用CASE表達式來只添加Ť他MiddleName + ' '一部分,如果中間名不爲空:

Select 
    ... 
    Agent, 
    FirstName + 
    case when MiddleName is not null then MiddleName + ' ' end + 
    LastName as Name, 
    ... 
    from tbSystemUser 
0
SELECT FirstName 
    +IIF(ISNULL(LTRIM(RTRIM(MiddleName)),'')<>'',' '+MiddleName,'') 
    +' '+LastName as Name 

情況下或者在您的SQL Server版本比舊的2012:

SELECT FirstName 
    +CASE WHEN ISNULL(LTRIM(RTRIM(MiddleName))) <> '' 
     THEN ' '+MiddleName 
     ELSE '' END 
    +' '+LastName as Name 

您沒有指定什麼意思空。與大多數其他解決方案不同,這將處理任何長度的空字符串,包括空值,但不包含特殊字符。我會假定沒有人去中間名並添加換行符? :)

1

我相信你可以使用子查詢這樣:

Select Agent, Name from 
(
    Select t1.Agent as Agent, t1.FirstName + ' ' t1.MiddleName + ' ' + t1.LastName as Name, 
    from tbSystemUser as t1 WHERE t1.MiddleName IS NOT NULL 
) 
NATURAL JOIN 
(
     Select t2.Agent as Agent, t2.FirstName + ' ' + t2.LastName as Name, 
     from tbSystemUser as t2 WHERE t2.MiddleName IS NULL 
) 

這將基於由兩個選擇創建的名稱構建你的答案。