gpt4 book ai didi

sql - 对空字符串使用 CASE

转载 作者:行者123 更新时间:2023-12-03 09:24:17 26 4
gpt4 key购买 nike

我有一个这样的代码:

SELECT
'"35933-14",' ||
'"' || us_1.gr_UniqueName || '",' ||
'"' || (CASE WHEN us_1.mls0_PrimaryString = '' THEN 'This is empty'
WHEN CAST(Length(us_1.mls0_PrimaryString) AS INT) < 4 THEN ('Less than 4: '|| SUBSTR(us_1.mls0_PrimaryString,1,10000))
ELSE SUBSTR(us_1.mls0_PrimaryString,1,10000) END) || '",' ||
'"",' ||
'"",' ||
'""'
FROM
us_GroupTab us_1
WHERE (us_1.gr_Active = 1)
AND (us_1.gr_PurgeState = 0)
AND (us_1.gr_PartitionNumber = 0)
AND (us_1.gr_UniqueName IN ('US_HARDWARE_1', 'US_HARDWARE_2','GROUP_NULL'));

基本上,问题在于并非所有空字符串都得到处理,某些用户仅输入第一个 case 语句无法处理的多个空格。有什么办法可以做到这一点,我尝试过使用 TRIM 功能,但它不起作用。

谢谢!

最佳答案

空字符串与 Oracle 中的 null 相同,并且不能将任何内容与 null 进行比较。您需要使用 is null 而不是 = null= ''

CASE WHEN TRIM(us_1.mls0_PrimaryString) IS null THEN 'This is empty' ...

您也不需要将长度检查强制转换int。 12c 之前的 varchar2 的最大长度是 4000 个字符,因此在 substr 中使用 10000 是没有意义的。事实上,第一个 substr 无论如何都不会执行任何操作,因为您已经知道长度小于 4。

如果您想在检查之前删除换行符和回车符 - 这也许是您应该在客户端执行的操作,除非您也想存储它们 - 那么您可以先替换它们:

CASE WHEN TRIM(REPLACE(REPLACE(us_1.mls0_PrimaryString, CHR(10)), CHR(13))) IS null
THEN ...

或者更一般地删除所有会捕获制表符等的空格:

CASE WHEN REGEXP_REPLACE(us_1.mls0_PrimaryString, '[[:space:]]') IS NULL THEN ...

或者:

CASE WHEN REGEXP_LIKE(us_1.mls0_PrimaryString, '^[[:space:]]*$') THEN ...

请注意,不需要使用 regexp_replace 单独进行 trim

关于sql - 对空字符串使用 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24654086/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com