将记录从Char
列复制到Varchar
列后,我无法使用like
语句找到行
Create database testDB Go USE [testDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[TestTable1] ( [Col_char] [char](20) NULL, [Col_nchar] [nchar](64) NULL, [Col_varchar] [varchar](64) NULL, [Col_nvarchar] [nvarchar](64) NULL ) ON [PRIMARY] GO SET ANSI_PADDING OFF GO insert into TestTable1 values ('Sumit1%', 'Sumit1%', 'Sumit1%', 'Sumit1%') insert into TestTable1 values ('Sumit2*', 'Sumit2*', null, 'Sumit2*') select [Col_char], LEN([Col_char]), [Col_nchar], LEN([Col_nchar]), [Col_varchar], LEN([Col_varchar]), [Col_nvarchar], LEN([Col_nvarchar]) from TestTable1
这一行给了我搜索结果
select * from TestTable1 where 'sumit1' like [Col_varchar]
现在我正在替换*
并将%
[Col_char]复制到[Col_varchar]列
update TestTable1 set [Col_varchar] = Replace([Col_char], '*', '%') where [Col_char] like '%2%' select * from TestTable1 select * from TestTable1 where 'sumit1' like [Col_varchar] -- this line is not showing any results select * from TestTable1 where 'sumit2' like [Col_varchar] select Len(Replace([Col_char], '*', '%')), Len(Replace([Col_varchar], '*', '%')), * from TestTable1
JamieD77.. 5
当你有SET ANSI_PADDING ON
一个CHAR(20)
将永远是20个字符填充右侧空格.
当你将它转换为varchar时,你仍然有20个字符,所以你的Col_varchar
值实际上是"Sumit2% "
这样你正在寻找一个以一开始的字符串,Sumit2
但最后还有一堆空格
如果您使用替换值
UPDATE TestTable1 SET [Col_varchar] = RTRIM(REPLACE([Col_char],'*','%')) WHERE [Col_char] LIKE '%2%'
它应该适合你.
关于ANSI_PADDING的信息https://msdn.microsoft.com/en-us/library/ms187403.aspx
当你有SET ANSI_PADDING ON
一个CHAR(20)
将永远是20个字符填充右侧空格.
当你将它转换为varchar时,你仍然有20个字符,所以你的Col_varchar
值实际上是"Sumit2% "
这样你正在寻找一个以一开始的字符串,Sumit2
但最后还有一堆空格
如果您使用替换值
UPDATE TestTable1 SET [Col_varchar] = RTRIM(REPLACE([Col_char],'*','%')) WHERE [Col_char] LIKE '%2%'
它应该适合你.
关于ANSI_PADDING的信息https://msdn.microsoft.com/en-us/library/ms187403.aspx