我的列
值低于以下值第一个值的长度为48。
第二个值的长度为97.
现在条件是如果长度是任何值的97,那么只使用前48个字符,否则使用现有的。
SUBSTR功能已经存在
SELECT SUBSTR(CLNT_ID,0,48) FROM CLNT;
工作正常,现在我只想在值的长度等于97的情况下使用它。
此Select语句是一个商店过程的一部分。 请协助确定正确的查询。 提前致谢
答案 0 :(得分:2)
SELECT
case
when regexp_like (CLNT_ID , '^[[:alnum:]]{97}$')
then SUBSTR(CLNT_ID,0,48)
else null
end label1, CLNT_ID
FROM CLNT;
答案 1 :(得分:2)
我认为最简单的方法是使用length()
:
select (case when length(clnt_id) = 97
then substr(clnt_id, 1, 48)
else clnt_id
end)
from clnt;
这似乎是最简单的逻辑实现。另请注意,substr()
的第二个参数来自" 1"不是" 0",所以你应该使用" 1"那里(效果是一样的)。
答案 2 :(得分:1)
您也可以尝试这种方式,
SELECT CASE SIGN( LENGTH(:p_text) - 97 )
WHEN -1 THEN
:p_text
ELSE
SUBSTR(:p_text, 1, 48)
END
FROM dual;