2015-12-14 7 views
5

Nach dem Kopieren von Datensätzen aus einer Char Spalte in eine Varchar Spalte konnte ich nicht die Zeile mit like AnweisungNach dem Kopieren von Datensätzen aus einer Char-Spalte in eine Varchar-Spalte konnte ich die Zeile nicht mit like-Anweisung in SQL Server 2014 finden, aber in 2003

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 

Diese Linie gibt mir das Suchergebnis

select * 
from TestTable1 
where 'sumit1' like [Col_varchar] 

Jetzt finde ich * mit % & co bin ersetzen Kopie ren [Col_char] bis [Col_varchar] Spalte

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 
+2

Ein gutes Beispiel für eine gut formulierte Beispiel und die Frage – xQbert

+1

Ihr Beispiel funktioniert gut für mich .. so lange wie Sie 'SET ANSI_PADDING ON' zu Beginn der Abfrage – JamieD77

+0

Einfache Anführungszeichen weglassen sind für String-Literale. Verwenden Sie doppelte Anführungszeichen für Bezeichner (z. B. Spaltennamen), wie in ANSI SQL definiert. (SQL Server hat auch eckige Klammern.) – jarlh

Antwort

5

Wenn Sie SET ANSI_PADDING ON ein CHAR(20) haben immer 20 Zeichen lang sein, indem die rechte Seite mit Leerzeichen Polsterung.

Wenn konvertieren Sie, dass Sie noch 20 Zeichen haben in varchar so Ihre Col_varchar Wert tatsächlich "Sumit2% " ist, so dass Sie nach einer Zeichenkette suchen, der mit Sumit2 beginnt, sondern hat auch eine Reihe von Leerzeichen am Ende

, wenn Sie Ersetzen Sie den Wert mit

UPDATE 
    TestTable1 
SET 
    [Col_varchar] = RTRIM(REPLACE([Col_char],'*','%')) 
WHERE 
    [Col_char] LIKE '%2%' 

sollte es für Sie arbeiten.

Info auf ANSI_PADDING https://msdn.microsoft.com/en-us/library/ms187403.aspx

+0

Danke JamieD77, Es hat mir geholfen .. :) –