sql 长度(空)

sql length(null)

我有两列: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 可以这么说。

有人有想法吗?

您可以使用 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

我觉得这样用会好很多...

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

您可以使用 || 运算符连接列:

LENGTH(p.firstName || p.lastName)

示例:

select ('abc'||null||'d') from dual; -- abcd
select length('abc'||null||'d') from dual; -- 4

试试这个

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

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

COALESCE(LENGTH(p.firstName), 0) + COALESCE(LENGTH(p.lastName),0)

注意: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