2015-12-14 3 views
5

Char列からVarchar列にレコードをコピーした後、 like声明Char列からVarchar列にレコードをコピーした後、SQL Server 2014のlike文を使用して行を見つけることができませんでしたが、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 

この行は、私が% &共同で*を交換しています今

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

検索結果を与えているを使用して行を検索しますあなたがSET ANSI_PADDING ONCHAR(20)を持っている場合は、[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 
+2

をANSI_PADDING上

情報 – xQbert

+1

あなたの例では、限り、あなたは、クエリ – JamieD77

+0

単一引用符の先頭に 'SET ANSI_PADDING on'のをオフに残して...私のために正常に動作します文字列リテラル用です。 ANSI SQLで定義されているように、識別子(列名など)には二重引用符を使用します。 (SQL Serverにも角括弧があります) – jarlh

答えて

5

に[Col_char] pyingは常にスペースで右サイドをパディングによって20個の文字になります。

あなたはそれがあなたのCol_varchar値が実際にあなたがSumit2で始まる文字列を探している"Sumit2% "であるだけでなく、あなたの場合、エンド

でスペースの束を持っているので、あなたはまだ20個の文字を持つVARCHARに変換すると値を

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

と置き換えてください。うまく策定例と質問の素晴らしい例https://msdn.microsoft.com/en-us/library/ms187403.aspx

+0

JamieD77ありがとうございました。 –

関連する問題