【问题标题】:Creating a view. Replacing a NULL value with an empty string. SQL创建视图。用空字符串替换 NULL 值。 SQL
【发布时间】:2017-01-24 17:04:34
【问题描述】:

我想从一个表中创建一个视图,其中我们有一个 FirstName、LastName 和 MiddleName 列,并且 MiddleName 可能为 NULL,加上薪水。我需要将 MiddleName 替换为没有 MiddleName 的空字符串。我正在使用 SQL 管理工作室。 我想出了这段代码:

CREATE VIEW V_EmployeeNameJobTitle AS
SELECT FirstName  + ' ' + MiddleName + ' ' + LastName AS [Fullname], Salary FROM Employees WHERE MiddleName IS NOT NULL
UNION SELECT FirstName  + ' ' + LastName AS [Fullname], Salary FROM Employees WHERE MiddleName IS NULL 

但这似乎不像我想要的那样工作,而且它不是很漂亮。任何其他建议我可以如何缩短这个。提前致谢。

【问题讨论】:

  • coalesce(column, '').

标签: sql sql-server view


【解决方案1】:

使用ISNULL() 函数,它将NULL 值替换为您选择的值。例如:

CREATE VIEW V_EmployeeNameJobTitle AS
SELECT FirstName  + ' ' + ISNULL(MiddleName, '') + ' ' + LastName AS [Fullname], Salary 
FROM Employees 

或者如果你不想在中间名为空时得到2个空格,你可以进行以下操作:

CREATE VIEW V_EmployeeNameJobTitle AS
SELECT (CASE WHEN MiddleName IS NULL THEN FirstName  + ' ' + LastName
             ELSE FirstName  + ' ' + MiddleName + ' ' + LastName END) AS [Fullname], 
Salary 
FROM Employees 

【讨论】:

    【解决方案2】:
    SELECT FirstName + ' ' + 
           (case when MiddleName is null then '' else MiddleName + ' ' end) +
           LastName AS [Fullname]
    

    【讨论】:

    • 但我只想要名字和姓氏之间的一个空格。如果我只使用 coalesce 或 isNull 我不会有两个空格吗?
    • 是的。我刚刚回答了这个问题并考虑了您的情况
    【解决方案3】:

    使用IsNull函数

     CREATE VIEW V_EmployeeNameJobTitle AS
        SELECT FirstName  + ' ' 
             + MiddleName + ' ' 
             + IsNull(LastName, '') AS [Fullname]
       , Salary 
     FROM Employees
    

    【讨论】:

      猜你喜欢
      • 2021-04-04
      • 1970-01-01
      • 2016-01-22
      • 2021-12-09
      • 2020-06-18
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多