首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将INT列连接到逗号分隔的INT列表

将INT列连接到逗号分隔的INT列表
EN

Stack Overflow用户
提问于 2009-12-09 00:18:27
回答 4查看 4.6K关注 0票数 0

我正在运行SQL Server2008,并试图对一些存储不佳的数据运行一些查询,我不想遍历这些数据并试图清理它们(需要处理数百万行)。我有一个日志表,其中一个表中包含一些以逗号分隔的字符串形式的FK数据,另一个表中包含一个整数PK。我希望能够将整数的FK列表连接到主表中适当的PK整数。我的查询是这样的:

代码语言:javascript
复制
SELECT
    L.*
FROM MyLogs L (NOLOCK)
    INNER JOIN Details D (NOLOCK) ON L.SearchValue = D.ID

在上面的查询中,L.SearchValue包含"123,456,7890",而D.ID是一个整数主键。有没有办法以任何一种有效的方式将这些连接在一起,或者我应该接受我的命运,并开始编写一个脚本,将所有这些逗号分隔的值分解到单独的行中?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-12-09 00:29:44

您需要其中之一(修改为强制转换为int)

T-SQL: Opposite to string concatenation - how to split string into multiple records

然后,你就可以

代码语言:javascript
复制
SELECT    
L.*
FROM MyLogs L (NOLOCK),    
Details D (NOLOCK) 
Where D.ID In fn_WhatEverYouCallYourSplitFunction(L.SearchValue, ',')

不,这不是很有效率。完全没有。

票数 0
EN

Stack Overflow用户

发布于 2009-12-09 00:25:24

非常非常糟糕的设计,这将是非常糟糕的性能,但你可以使用CharIndex函数

代码语言:javascript
复制
   Select L.*FROM MyLogs L (NOLOCK)    
     Join Details D (NOLOCK) 
         On CharIndex(Cast(D.ID as varChar(6)), L.SearchValue) > 0

这将产生一些错误的连接,因为12将在'34,312,455‘中。要消除这些连接,您必须通过包括分隔符来使查询更加复杂

代码语言:javascript
复制
    Select L.*FROM MyLogs L (NOLOCK)    
     Join Details D (NOLOCK) 
         On CharIndex(Cast(', ' + D.ID as varChar(6)) + ',', 
                             ', ' + L.SearchValue + ',') > 0

..。但我建议您开始编写一个脚本,将所有这些逗号分隔的值分成单独的行。

票数 0
EN

Stack Overflow用户

发布于 2009-12-09 00:26:51

最终,破坏这些存储糟糕的数据的脚本将比编写一个尝试连接这些值的粗糙SQL查询的效率高得多。我不确定加入是不是可行的方法。也许某种形式的子查询更适合作为计划A。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1868037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档