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
我有两列: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