协助从可能有逗号的列中选择 SQL Case 语句

Posted

技术标签:

【中文标题】协助从可能有逗号的列中选择 SQL Case 语句【英文标题】:Assistance on SQL Case statement for selecting from a column that Might have a comma 【发布时间】:2017-09-20 18:44:57 【问题描述】:

我正在尝试向视图中添加一列,在该视图中我使用以下代码仅从格式为“姓氏,名字”的字段中提取姓氏:

VALUE(RTRIM(SUBSTR(A.PREVIOUS_NAMES,1,LOCATE(',', A.PREVIOUS_NAMES)-1)), '') 
AS "PREVIOUS_NAME",  

当字段中有逗号时,这可以正常工作,但是,正如以下问题所引用的,当逗号不存在时,视图会出错。SQLCode=-138 flagging on large count tables but not small DB2

我试图提出一个案例陈述来解决这个问题,选择逗号出现的时间,但我没有成功,我正在寻求有经验的人的帮助或建议。

RTRIM(
   CASE WHEN LOCATE(",", A.PREVIOUS_NAMES) = 0 
   THEN A.PREVIOUS_NAMES 
   ELSE SUBSTR(A.PREVIOUS_NAMES,1,LOCATE(",", A.PREVIOUS_NAMES)-1) 
   END) AS "PREVIOUS_NAME"

它不是很复杂,它给我 SQLcode-206 说“,在它使用的上下文中无效”。

感谢您提供的任何帮助!

【问题讨论】:

【参考方案1】:

我在 DB2 中没有这样做,但是一个常见的方法是添加一个逗号:

VALUE(RTRIM(SUBSTR(A.PREVIOUS_NAMES, 1, LOCATE(',', A.PREVIOUS_NAMES || ',') - 1)), '') 
AS "PREVIOUS_NAME",  

【讨论】:

这正是我想要完成的。非常感谢戈登。

以上是关于协助从可能有逗号的列中选择 SQL Case 语句的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询以从逗号分隔的列中检索值[重复]

CASE 语句 SQL 中返回多列

sql server 2008 group_Concat() 版本但是在不同的列中(不是逗号分隔)

在 SQL 中使用 IF/ELSE 重复 CASE 块

如何通过在表 A 的列中查找逗号分隔值来从表 B 返回值

sql SQL - 在以逗号,管道或分号或任何其他字符分隔的列中获取多个值或连接值的值