CONCAT'ing NULL fields

前端 未结 11 842
小鲜肉
小鲜肉 2021-02-01 00:25

I have a table with three fields, FirstName, LastName and Email.

Here\'s some dummy data:

FirstName | LastName | Email
Adam        West       adam@west.c         


        
相关标签:
11条回答
  • 2021-02-01 00:54

    Look at CONCAT_WS

    For example:

    CONCAT_WS('',NULL,"TEST STRING","TEST STRING 2")
    

    Yields

    TEST STRINGTEST STRING 2

    This is easier than constructing IFNULL around everything. You can use an empty string as the separator.

    0 讨论(0)
  • 2021-02-01 00:55
    SELECT ISNULL(FirstName,'')+ISNULL(LastName,'')+ISNULL(Email,'') as Vitals FROM MEMBERS
    

    is recommended, but if you are really hooked on CONCAT, wrap it in {fn } and you can use the ODBC function like:

    SELECT {fn CONCAT(ISNULL(FirstName,''), ISNULL(LastName,''), ISNULL(Email,''))} as Vitals FROM MEMBERS
    

    If you need first<space>last but just last when first is null you can do this:

    ISNULL(FirstName+' ','') + ISNULL(LastName,'')
    

    I added the space on firstname which might be null -- that would mean the space would only survive if FirstName had a value.

    To put them all together with a space between each:

    RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,''))
    
    0 讨论(0)
  • 2021-02-01 00:55

    After observing the answers for this question, you may combine all of them into one simple solution

    CONCAT_WS(',',
    IF(NULLIF(FirstName, '') IS NULL, NULL, FirstName),
    IF(NULLIF(LastName, '') IS NULL, NULL, usr_lastname),
    IF(NULLIF(Email, '') IS NULL, NULL, Email))
    

    So, in short we use CONCAT_WS to concatenate our fields and separate them with ,; and notice that NULL fields nor EMPTY wont concatenated

    NULLIF will check if the field is NULL or EMPTY, a field that contains only spaces or is empty as well, ex: '', ' ') and the output will be either NULL or NOT NULL

    IF Will out put the field if it's not NULL or EMPTY

    0 讨论(0)
  • 2021-02-01 00:56

    You can always use the CONCAT_NULL_YIELDS_NULL setting..

    just run SET CONCAT_NULL_YIELDS_NULL OFF and then all null concatenations will result in text and not null..

    0 讨论(0)
  • 2021-02-01 00:59

    SQL Server does not have a CONCAT function.
    (Update: Starting from MS SQL Server 2012 it was introduced CONCAT function)

    In the default SQL Server behavior, NULLs propagate through an expression.

    In SQL Server, one would write:

    SELECT FirstName + LastName + Email as Vitals FROM MEMBERS
    

    If you need to handle NULLs:

    SELECT ISNULL(FirstName, '') + ISNULL(LastName, '') + ISNULL(Email, '') as Vitals FROM MEMBERS
    
    0 讨论(0)
  • 2021-02-01 01:06

    In the case of MS Access

    Option 1) SELECT (FirstName + " " + LastName + " " + Email) as Vitals FROM MEMBERS You will get blank result in the case of any field with null.

    Option 2) SELECT (FirstName & " " & LastName & " " & Email) as Vitals FROM MEMBERS You will get Space in place of field with null.

    0 讨论(0)
提交回复
热议问题