将记录从Char列复制到Varchar列后,I';我在SQL Server 2014中找不到使用like语句的行,但在2003年很好

将记录从Char列复制到Varchar列后,I';我在SQL Server 2014中找不到使用like语句的行,但在2003年很好,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,将记录从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)

将记录从
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\u char]复制到[Col\u 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 

当您将ANSI_PADDING设置为ON时,a
CHAR(20)
将始终为20个字符,方法是在右侧填充空格

当您将其转换为varchar时,您仍然有20个字符,因此您的
Col\u varchar
值实际上是
的“Sumit2%”
,因此您正在寻找一个以
Sumit2
开头,但结尾还有一堆空格的字符串

如果使用替换该值

UPDATE
    TestTable1
SET 
    [Col_varchar] = RTRIM(REPLACE([Col_char],'*','%'))
WHERE
    [Col_char] LIKE '%2%'
它应该对你有用


关于ANSI_PADDING的信息

一个很好的例子和问题,你的例子对我来说很好。。只要在查询的开头不使用
设置ANSI_PADDING ON
,单引号就用于字符串文字。按照ANSI SQL的定义,对标识符(例如列名)使用双引号。(SQL Server也有方括号。)谢谢JamieD77,它帮助了我:)