gpt4 book ai didi

sql - 将记录从 Char 列复制到 Varchar 列后,我无法在 SQL Server 2014 中使用 like 语句找到该行,但在 2003 中很好

转载 作者:行者123 更新时间:2023-12-04 13:02:12 26 4
gpt4 key购买 nike

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

最佳答案

当您有 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 的信息

关于sql - 将记录从 Char 列复制到 Varchar 列后,我无法在 SQL Server 2014 中使用 like 语句找到该行,但在 2003 中很好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34270476/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com