在DB2 SQL中如何提取字符串空格分隔后的最后一个字符
你现有写法的逻辑存在问题:RIGHT(TRIM(value), 1)是直接取修剪后字符串的最后一位字符,不会校验该字符是否为最后一个空格后的独立单个字符,针对第一个样本MPP ref会返回字符f,和你预期的空值结果不符。
正确实现需要先提取最后一个空格后的所有内容,再判断其长度是否为1,匹配时返回对应字符,否则返回空值,不同数据库的实现写法参考如下:
MySQL 写法
SELECT IF( LENGTH(SUBSTRING_INDEX(TRIM(value), ' ', -1)) = 1, SUBSTRING_INDEX(TRIM(value), ' ', -1), '' ) AS Substr FROM MyTable;
SQL Server 写法
SELECT CASE WHEN LEN(RIGHT(TRIM(value), CHARINDEX(' ', REVERSE(TRIM(value))) - 1)) = 1 THEN RIGHT(TRIM(value), CHARINDEX(' ', REVERSE(TRIM(value))) - 1) ELSE '' END AS Substr FROM MyTable;
PostgreSQL 写法
SELECT CASE WHEN LENGTH(SPLIT_PART(TRIM(value), ' ', ARRAY_LENGTH(STRING_TO_ARRAY(TRIM(value), ' '), 1))) = 1 THEN SPLIT_PART(TRIM(value), ' ', ARRAY_LENGTH(STRING_TO_ARRAY(TRIM(value), ' '), 1)) ELSE '' END AS Substr FROM MyTable;
内容的提问来源于stack exchange,提问作者user15973370
相关产品推荐
相关产品推荐

