代码之家  ›  专栏  ›  技术社区  ›  l. schwarz

sql长度(null)

  •  0
  • l. schwarz  · 技术社区  · 6 年前

    我有两列:p.firstName和p.lastName。

    现在我想显示两个名称的组合长度,问题是,在p.lastName的某些字段中存储了值“null”。

    当我尝试这样做时:

    LENGTH(p.firstName + p.lastName)
    

    我收到一个错误:

    ORA-01722 invalid number
    

    但是如果我把它分开

    LENGTH(p.firstName) + LENGTH(p.lastName)
    

    它没有给我错误信息。但总和的长度为NULL,即使firstName有几个字符。p.LastName的NULL将其打断,可以这么说。

    有人有主意吗?

    6 回复  |  直到 6 年前
        1
  •  2
  •   Jay Shankar Gupta    6 年前

    可以使用IFNULL()、ISNULL()、COALESCE()和NVL()函数

    SELECT LENGTH(COALESCE(p.firstName,'') + COALESCE(p.lastName,'')) AS Len FROM TableName
    

    SELECT LENGTH(ISNULL(p.firstName,'') + ISNULL(p.lastName,'')) AS Len FROM TableName
    

    SELECT LENGTH(IFNULL(p.firstName,'') + IFNULL(p.lastName,'')) AS Len FROM TableName
    

    SELECT LENGTH(NVL(p.firstName,'') + NVL(p.lastName,'')) AS Len FROM TableName
    

    SELECT LENGTH(p.firstName || p.lastName) AS Len FROM TableName
    
        2
  •  1
  •   user2575725 user2575725    6 年前

    您可以使用 || 操作员:

    LENGTH(p.firstName || p.lastName)
    

    示例:

    select ('abc'||null||'d') from dual; -- abcd
    select length('abc'||null||'d') from dual; -- 4
    
        3
  •  1
  •   Ralph519    6 年前

    试试这个

    select case when p.firstname is null then 0 else length(p.firstName) end + 
      case when p.lastName is null then 0 else 
      length(nickname) end from p
    
        4
  •  1
  •   dnoeth    6 年前

    Oracle通常将空字符串视为NULL:

    COALESCE(LENGTH(p.firstName), 0) + COALESCE(LENGTH(p.lastName),0)
    
        5
  •  0
  •   WorksOnMyLocal    6 年前

    我认为这样使用更好。。。

    SELECT LENGTH(ISNULL(p.firstName,'') + ISNULL(p.lastName,'')) AS length FROM TableName
    
        6
  •  0
  •   Mohsen Najafzadeh    3 年前

    注意:Oracle在处理空白字符时表现不同:

    ---------Oracle
    SELECT LENGTH('') , LENGTH(null) FROM DUAL
    --result: null,null
    
    ---------Postgress
    SELECT LENGTH('') , LENGTH(null)
    --result: 0,null
    
    ---------SQL Server
    SELECT LEN('') , LEN(null)
    --result: 0,null
    
    ---------MySQL
    SELECT LENGTH('') , LENGTH(null)
    --result: 0,null