所以我是SQL的新手,我对它几乎没有经验。请原谅,如果这是非常基本的,但我似乎无法在谷歌搜索后找到它...
所以我有一个包含serialnumber字段的表。 我有一个输入字段,其中包含逗号分隔值,每个值都是一个序列号。我只想显示逗号分隔字符串中的序列号。
所以我有一个splitstring函数,我可以使用它将字符串拆分为逗号:
SELECT * FROM dbo.SplitString('sn1,sn2,sn3,sn4,sn5,sn6', ',')
这会返回一个表,每个sn都是一行。
所以我想要这样的东西:
SELECT
*
FROM
tbl_serials AS sn
WHERE
sn.serialnumber in dbo.SplitString('sn1,sn2,sn3,sn4,sn5,sn6', ',')
所以这只会显示serialnumber在字符串中的行。但我不知道如何合成这个。
感谢任何帮助
答案 0 :(得分:4)
执行此操作的一种方法是使用join
:
SELECT sn.*
FROM tbl_serials sn JOIN
dbo.SplitString('sn1,sn2,sn3,sn4,sn5,sn6', ',') as ss(val)
ON sn.serialnumber = ss.val;
使用您的路线,您需要一个子查询:
SELECT sn.*
FROM tbl_serials sn JOIN
WHERE sn.serialnumber in (SELECT val
FROM dbo.SplitString('sn1,sn2,sn3,sn4,sn5,sn6', ',') as ss(val)
);
在这两种情况下,as ss(val)
为表别名和分配值别名。某些版本的SplitString
可能会返回多个值(例如位置)。如果您有这样的版本,则需要将额外的返回值包含为命名列。