SQL Server:在多列上搜索输入

时间:2016-08-29 09:22:46

标签: sql-server

我试图在多个列上搜索单个术语。我收到错误,因为其中一列是日期时间。我怎么能用内联sql进行通用搜索。这样我就试过了。

create table tbl_test1
(id int identity(1,1),
column1 nvarchar(50),
coulmn2 nvarchar(50),
coulmn3 nvarchar(50),
coulmn4 datetime)-- Create a table 

insert into tbl_Test1 (column1,coulmn2,coulmn3,coulmn4) values
('Griff','Serjey','Maciej',GETDATE()),
('King','Fisher','Ajay',GETDATE()),
('Paul','Griff','Serjey',GETDATE()),
('King','Fisher','Griff',GETDATE())

select * from tbl_Test1 where 'Griff' IN (column1,coulmn2,coulmn3,coulmn4)

我收到了这个错误。

  

从字符转换日期和/或时间时转换失败   字符串。

3 个答案:

答案 0 :(得分:1)

要修复您的要求,您可以先将column4datetime列转换为nvarchar(max)第一个

select * from tbl_Test1 where 'Griff' IN
 (column1,coulmn2,coulmn3,convert(nvarchar(max),coulmn4))

但是,由于性能问题=x

,建议不要这样做

答案 1 :(得分:0)

从2012年起,您可以使用.TRY_Convert

select * from #tbl_Test1 
where 'Griff'
 IN (column1,coulmn2,coulmn3,try_convert(varchar(10),coulmn4))

当您使用日期列

搜索时,您可能需要在其他列上执行类似的强制转换和转换

答案 2 :(得分:0)

您已经知道您的column4属于datetime类型,那么我们为什么要使用该列搜索您的字符串。只需忽略该列

试试这个,

SELECT *
FROM tbl_test1
WHERE 'Griff' IN (
        column1
        ,coulmn2
        ,coulmn3
        )