当前位置:  开发笔记 > 编程语言 > 正文

将记录从Char列复制到Varchar列后,我无法在SQL Server 2014中使用like语句找到该行,但在2003年没有问题

如何解决《将记录从Char列复制到Varchar列后,我无法在SQLServer2014中使用like语句找到该行,但在2003年没有问题》经验,为你挑选了1个好方法。

将记录从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



1> JamieD77..:

当你有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

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有