Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中选择时是否可以转换?_Sql_Sql Server_Tsql_Sql Server 2016 - Fatal编程技术网

在SQL中选择时是否可以转换?

在SQL中选择时是否可以转换?,sql,sql-server,tsql,sql-server-2016,Sql,Sql Server,Tsql,Sql Server 2016,我有一个简单的SQL查询,但输入参数是由多个值组成的字符串。我正试图让它工作,但可能我的语法是关闭的,或者它不可能像这样 SELECT * FROM Table WHERE CatID IN (SELECT CONVERT(TINYINT,value) FROM STRING_SPLIT(@Cat,'+')) 其中,@Cat='13+14+15'和CatID属于tinyint类型。我也尝试过使用CONVERT(TINYINT,*)而没有运气。 以前我使用的是下面的代码,但由于其他复杂因素,

我有一个简单的SQL查询,但输入参数是由多个值组成的字符串。我正试图让它工作,但可能我的语法是关闭的,或者它不可能像这样

SELECT * 
FROM Table
WHERE CatID IN 
(SELECT CONVERT(TINYINT,value) FROM STRING_SPLIT(@Cat,'+'))
其中,
@Cat='13+14+15'
CatID
属于tinyint类型。我也尝试过使用
CONVERT(TINYINT,*)
而没有运气。 以前我使用的是下面的代码,但由于其他复杂因素,我希望将其转换

SELECT * 
FROM Table
WHERE CatID IN 
(CONVERT(NVARCHAR, CatID) IN (SELECT * FROM STRING_SPLIT(@Cat,'+'))

如果有其他方法可以做到这一点,我愿意接受建议,也许可以直接拆分成整数?谢谢

如果您可以使用
FROM
子句中的别名指定调用
string\u split()
的参数,那就太好了:

SELECT t.* 
FROM Table t
WHERE t.CatID IN (SELECT CONVERT(TINYINT, val)
                  FROM STRING_SPLIT(@Cat, '+') ss(val)
                 );
但语法似乎不允许这样。您的子查询解决方案似乎是更好的解决方案,尽管我会将其封装在CTE中

您可以使用递归CTE直接拆分为整数:

with cte as (
       select convert(tinyint, left(@cat + '+', charindex('+', @cat) - 1)) as val,
              substring(@cat, charindex('+', @cat + '+') + 1, len(@cat)) as rest
       union all
       select convert(tinyint, left(rest + '+', charindex('+', rest) - 1)),
              substring(rest, charindex('+', rest + '+') + 1, len(rest))
       from cte
      )
select t.*
from table t
where t.catid in (select val from cte);

嗯,我不确定这是否是“直接的”,但它不需要自定义项。

您得到了什么错误?很抱歉,错误出现在其他地方。代码看起来像预期的那样工作。我正在尝试使用ss(val),但它给了我一个错误<代码>'STRING\u SPLIT'不是可识别的函数名。@MuffinMan。我用的是你问题中的语法。您可以轻松下载字符串拆分函数(google“sql server字符串拆分”)。调用函数时,需要包含架构名称。
STRING\u SPLIT
是内置函数,如果它们处于启用状态。@GordonLinoff STRING\u SPLIT工作正常,但一旦我在之后添加ss(val),它就会给出该错误。我甚至试过复制/粘贴你的第一个代码块,同样的错误。@MartinSmith我正在运行2016。