如何从表中获取多个值

时间:2011-11-24 18:35:07

标签: sql sql-server sql-server-2000

如何拆分字符串值

我想获得身份....

Table1

ID 

001
002
003

查询

SELECT id FROM Table1 WHERE (id IN ('" & Eid & "'))

If Eid = 001 means It is displaying id 001
If Eid = 001, 002 means id is not displaying

如何查询获取多个ID。

需要查询帮助

3 个答案:

答案 0 :(得分:2)

删除'引号:

SELECT id FROM Table1 WHERE (Personid IN (" & Eid & "))

您的版本正在生成

... WHERE (PersonID IN ('001,002'))

表示设置括号内有 SINGLE 值。没有单引号:

... WHERE (PersonID IN (001,002))

您在设置的括号中有两个值。

但请注意,前导0可能会导致问题。它们可以作为八进制值进行解释,因此009将被解释为“10十进制”。您可能需要预先处理您的值以将其转换为

... WHERE (PersonID IN ('001', '002))

代替。

答案 1 :(得分:2)

CREATE FUNCTION [dbo].[fnGetIDasTable] (
    @ids varchar(MAX), 
    @separator varchar(20)
) RETURNS @retTable TABLE(ID bigint)
BEGIN
    DECLARE @firstComma bigint
    IF (@ids IS NOT NULL)
    BEGIN
        WHILE @ids != ''
        BEGIN
            SET @firstComma = CHARINDEX(@separator, @ids)
            IF @firstComma = 0
            BEGIN
                INSERT INTO @retTable 
                    VALUES (@ids)
                RETURN
            END
            INSERT INTO @retTable 
                VALUES (CONVERT(bigint, SUBSTRING(@ids, 1, @firstComma - 1)))
            SET @ids = SUBSTRING(@ids, @firstComma + 1, LEN(@ids))
        END
    END
    RETURN
END
GO

DECLARE @IdList varchar(MAX) = '1,3'
SELECT id FROM Table1 
    INNER JOIN [dbo].[fnGetIDasTable] (@IdList,',') il ON Table1.id = il.ID
GO

答案 2 :(得分:0)

与Marc B的回答一样,但我的解决方案更容易一些。

SELECT id FROM Table1 WHERE id IN (
                                   replace(
                                           replace('" & Eid & "',' ','')
                                           ,',',''','''
                                          )
                                  )

首先替换是删除空格(如果没有空格,可以删除此替换)

第二次替换正在替换','