当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

SQL Server-具有字符串操作的查询

admin 109℃
我需要查询以下问题。表1指定了必需的输入字段。我将获取非活动字段='no',mandt字段='yes'

所以我有4条记录,字段是sev、sev1、cde、frt。

表1:

Fields                 Inactive              mandt_field

sev                     no                      yes
sev1                    no                      yes
sev2                    yes                     yes
abd                     no                       no
cde                     no                      yes
frt                     no                      yes

表2有类似的数据

concession           add_fields

TH-123               -sev*yes-sev1*no-sev2*yes
Th-234               -sev*yes-sev1*yes-cde*yes-frt*no
Th-345               -sev*yes-cde*yes-frt*no
TH-456               -cde*no-frt*no
Th-012               -sev*no-sev1*no-cde*no-frt*no
Th-451               -frt*yes
TH-900               -sev2*no

现在我需要在add_字段中没有上述4个字段的记录。 输出应返回以下记录:-th-123、th-345、th-456、th-451、th-900。

这4条记录没有我们从上一个表(sev、sev1、cde、frt)检索到的所有4个字段。

表1产生的字段数可能不同..因为这些字段来自表数据…所以我们可能有(sev,sev1,cde,frt….)

回答您原来的问题

SELECT DISTINCT concession
FROM Table2
INNER JOIN Table1 ON Table2.add_fields NOT LIKE '%-' + Table1.Fields + '*%'
WHERE Inactive='no' AND mandt_field='yes'

从评论中继续 add_fields 似乎包含项目列表。它依次包含代码对和是/否值。我建议把你的表2改成如下。这将把它放入first normal form

将其放入第一个普通表单将使更新和搜索更容易,而不必每次都解析每个字符串以将其分解为其组成项。它还允许您对数据应用完整性约束。

concession    code    YesNo
----------------------------
TH-123        sev       yes
TH-123        sev1      no
TH-123        sev2      yes
Th-234        sev       yes
....

简而言之:可能吧,但你不想尝试。

相反,从表2创建第三个表,该表包含相同的数据,但格式可以使用。这意味着要分割这片土地 add_fields 到列中,以便对表使用联接 Table1

长答:SQL正在完成巡回,因此您可以在其中编写任何程序(mandelbrot set in T-SQL)。但这很快就会变得复杂,所以你真的不想这么做。

转载请注明:我的代码 » SQL Server-具有字符串操作的查询