2015-12-14 7 views
5

Dopo aver copiato i record da una colonna Char a una colonna Varchar, non sono in grado per trovare la riga utilizzando like dichiarazioneDopo aver copiato i record da una colonna Char a una colonna Varchar, non riesco a trovare la riga utilizzando la dichiarazione simile in SQL Server 2014, ma nel 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 

Questa linea mi sta dando il risultato della ricerca

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

Ora sto sostituendo * con % & co Esecuzion e di copie [Col_char] a [Col_varchar] colonna

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

Un grande esempio di un esempio ben formulato e mettere in discussione il vostro esempio – xQbert

+1

funziona bene per me .. fino a quando si lascia fuori 'SET ANSI_PADDING ON' all'inizio della query – JamieD77

+0

singoli apici sono per stringhe letterali. Utilizzare le virgolette doppie per gli identificatori (ad es. I nomi delle colonne), come definito da ANSI SQL. (SQL Server ha anche parentesi quadre.) – jarlh

risposta

5

Quando si dispone di un SET ANSI_PADDING ONCHAR(20) sarà sempre di 20 caratteri da imbottitura lato destro con spazi.

Quando si converte che a VARCHAR avete ancora 20 caratteri in modo che il valore è in realtà Col_varchar"Sumit2% " quindi siete alla ricerca di una stringa che inizia con Sumit2 ma ha anche un sacco di spazi alla fine

se sostituire il valore utilizzando

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

dovrebbe funzionare per voi.

Informazioni su ANSI_PADDING https://msdn.microsoft.com/en-us/library/ms187403.aspx

+0

Grazie JamieD77, mi ha aiutato .. :) –

Problemi correlati