2015-02-08 25 views
0

分隔语句结果我有这个疑问,我正在尝试运行的问题是,SET @string =(select语句)SQL服务器设置变量来选择用逗号

DECLARE @startdate DATE 
DECLARE @enddate DATE 
DECLARE @string INT 

SET @startdate = '1/1/2015' 
SET @enddate = ' 1/31/2015 23 : 59 : 59 ' 
SET @string = (
     SELECT String 
     FROM mytable2 
     WHERE mt2.DATE BETWEEN @startdate 
       AND @enddate 
     ) 

SELECT * 
FROM mytable MT WITH (NOLOCK) 
INNER JOIN mytable2 MT2 WITH (NOLOCK) ON MT.ID = MT2.ID 
WHERE MT.DATE BETWEEN @startdate 
     AND @enddate 
    AND MT2.String IN (@String) 

任何帮助,将不胜感激。更新为正确的查询。

回答

0

如果我理解正确,您希望@string是来自特定查询的列值的逗号分隔列表。如果是这样,请尝试以下操作:

DECLARE @string VARCHAR(max) = ''; 

SELECT @string = @string + String + ',' 
FROM mytable2 
WHERE mt2.DATE BETWEEN @startdate AND @enddate 

您将以字符串末尾的尾随逗号结束。您可以使用rtrim功能将其关闭。

+0

我得到这个错误,因为我的var是一个INT 转换失败转换v archar值','为数据类型int。 所以我需要它列出由逗号分隔的INT值 – jlusco 2015-02-08 13:56:30

0

我会建议使用字符串连接的XML方法:

SET @string = STUFF((SELECT ',' + String 
        FROM mytable2 
        WHERE mt2.DATE BETWEEN @startdate AND @enddate 
        FOR XML PATH ('concat') TYPE 
        ).VALUE('/concat[1]', 'varchar(max)'), 
        1, 1, '') 

如果你的“弦”是某些其他类型,然后将其转换明确:

SET @string = STUFF((SELECT ',' + cast(String as varchar(8000)) 
        FROM mytable2 
        WHERE mt2.DATE BETWEEN @startdate AND @enddate 
        FOR XML PATH ('concat') TYPE 
        ).VALUE('/concat[1]', 'varchar(max)'), 
        1, 1, '') 
0

为什么不这样做,这way:

DECLARE @startdate DATE 
DECLARE @enddate DATE 

SET @startdate = '1/1/2015' 
SET @enddate = ' 1/31/2015 23 : 59 : 59 ' 

    SELECT 
    * 
    FROM mytable MT WITH (NOLOCK) 
    INNER JOIN mytable2 MT2 WITH (NOLOCK) ON MT.ID = MT2.ID 
    WHERE 
    MT.DATE BETWEEN @startdate AND @enddate 
    AND MT2.String IN (SELECT String 
         FROM mytable2 MT2 
         WHERE MT2.DATE BETWEEN @startdate AND @enddate)