首页 文章

用于替换空值的SQL查询 .

提问于
浏览
3

我需要一个SQL查询,它返回下表中的ContactDate,SortName,City,ContactType和Summary . 如果任何值为null,我需要它返回文本“No Entry” .

ContactTable

  • ContactID

  • ContactDate

  • UserID

  • 摘要

  • ContactType

  • SortName

UserTable

  • UserID

  • FirstName

  • 姓氏

  • AddressID

AddressTable

  • AddressID

  • 城市

  • 国家

  • 邮编

6 回答

  • 4

    使用' IIF '是Access数据库解决方案,但可以在其他DB中使用 .

    SELECT IIF(IsNull(Foo), 'No Entry' ,Foo), IIF(IsNull(Bar), 'No Entry' ,Bar) From TableName
    

    函数IIF返回2个值中的一个取决于表达式的评估 .
    SQL语法:IIF(表达式,true-value1,false-value)

  • 0

    您还可以为每列进行不同的调用 . 它将需要更多的单独调用,但如果您没有更多行进行更新可能会更快 .

    update ContactTable
    set ContactDate = 'No Entry'
    where ContactDate is null;
    

    对每列重复上述步骤 .

  • 8
    SELECT COALESCE(CAST(CONVERT(VARCHAR(10), ContactTable.ContactDate, 101) AS VARCHAR(10)), 'No Entry') AS ContactDate,
           COALESCE(ContactTable.SortName, 'No Entry') AS SortName,
           COALESCE(AddressTable.City, 'No Entry') AS City,
           COALESCE(ContactTable.ContactType, 'No Entry') AS ContactType
    FROM ContactTable
    LEFT OUTER JOIN UserTable ON ContactTable.UserID = UserTable.UserID
    LEFT OUTER JOIN AddressTable ON UserTable.AddressID = AddressTable.AddressID
    

    Here是上面CONVERT语句的SQL DateTime格式图表 .

  • 1

    COALESCE()在任何 balancer 的盐中都是值得的 .

    确保处理铸造问题 .

    如:

    --(SQL Server)
    SELECT
      C.ContactID,
      COALESCE(CAST(CONVERT(varchar(10), C.ContactDate, 101) AS varchar(10), 'No Entry') AS ContactDate,
      COALESCE(SorName, 'No Entry') AS SortName
    

    等等

  • 14
    SELECT 
      ISNULL(ContactDate, 'No Entry') AS ContactDate
    FROM Table
    

    使用ISNULL非常简单 .

  • 0

    此函数的Oracle版本称为 nvl . 相同的用法 - SELECT nvl(col_name, desired_value) FROM foo .

    更通用的版本是 decode ,它有三个参数,允许您指定要替换的列值(因此可以用'John'或其他东西替换所有'Johnny') .

相关问题