T sql select int value as cast varchar [重复]

Posted

技术标签:

【中文标题】T sql select int value as cast varchar [重复]【英文标题】:T sql select int value as casting varchar [duplicate] 【发布时间】:2015-07-27 08:36:45 【问题描述】:

我有一个名为 GetReport 的存储过程

customers.branches_ID is int type 

然而@Branches 参数是 varchar

@Branches 是“10,13534,554,776,767”

我想在 branch_ID 中搜索 10,13534,554,776,767,但是如果我转换/转换为 varchar,它对我不起作用。

ALTER PROCEDURE [dbo].[GetReport] 

@fromDate datetime,
@toDate datetime,
@Branches varchar (500) = null

AS
BEGIN

SET NOCOUNT ON; 

select * from customers where

(customers.CreatedDate between @fromDate and @toDate) and

(@Branches is null or CONVERT(varchar(500), customers.branches_ID) in(@Branches )) -- This part is not working for me


END

我该如何解决这个问题如何在 int 列内搜索多个逗号 varcvhar ?

谢谢。

【问题讨论】:

如果可能,更改设计以使用数据类型设计 来包含多个数据项,例如 xml 或表值参数。如果您无法更改设计,快速搜索应该会找到大量sql split commas 的结果。 T-SQL,与 大多数 语言一样,不会尝试检查您提供的单个字符串参数的内容,并且在发现该字符串中的逗号时,突然决定将其视为多个参数。 感谢您的帮助,请您分享简单的示例,如果可行,我将接受最佳答案 aspsnippets.com/Articles/… 只搜索表值参数。查看 MSDN 上的this tutorial @GarethD 如果 OP 传递了正确的类型,则无需拆分任何内容,即具有要搜索的值的 TVP 【参考方案1】:

至少有 4 种方法可以做到这一点。这是一个:

select * from customers where
customers.CreatedDate between @fromDate and @toDate and 
(@Branches is null or branches_ID
    IN(
         SELECT  y.i.value('(./text())[1]', 'nvarchar(4000)')
         FROM    ( SELECT    x = CONVERT(XML, '<i>' + REPLACE(@Branches, ',', '</i><i>')
                    + '</i>').query('.')
                 ) AS a
         CROSS APPLY x.nodes('i') AS y ( i )))

在这里寻找其他方法http://blogs.msdn.com/b/amitjet/archive/2009/12/11/sql-server-comma-separated-string-to-table.aspx

但如果您使用 Sql Server 2008 或更高版本,则可以将表值类型用于此类工作。

【讨论】:

以上是关于T sql select int value as cast varchar [重复]的主要内容,如果未能解决你的问题,请参考以下文章

SQL: 将int型转换为UNIQUEIDENTIFIER

基于上一行的sql更新

T-SQL查询:WITH AS 递归计算某部门的所有上级机构或下级机构

Value '0000-00-00' can not be represented as java.sql.Date解决办法

SQL server查询结果拼接

T-SQL使用CTE递归