PROBLEMA: Informações sobre uso do operador LIKE para converter string em consultas de data e hora

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 284997
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Sintomas
Quando o dia do mês é um dígito único, um formato de seqüência de caracteres de entrada inválida em uma consulta, que usa o operador LIKE com % um caractere curinga, pode levar a resultados inesperados.
Causa
Ao usar o operador LIKE com um caractere curinga (%), SQL Server primeiro converte a data especificada (entre aspas simples) para um formato de data/hora e converte a data em uma seqüência de caracteres varchar . Ao converter a data entre aspas simples com caractere curinga (%) para um formato de data/hora , o SQL Server rejeita todos os valores que não reconhece como uma data. Quando o dia do mês é um dígito único, se você não coloque dois espaços entre o mês e dia, o SQL Server não reconhece o valor como um formato válido datetime , que, portanto, pode levar a resultados inesperados.
Como Contornar
Certifique-se de que existem dois espaços entre o mês e o dia como no exemplo:
'Jan  3 2001%'				
Mais Informações

Etapas para reproduzir o problema

Executar este código:
USE pubsGOIF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[table1]') AND OBJECTPROPERTY(id, N'IsUserTable') = 1)DROP TABLE [dbo].[table1]GOCREATE TABLE [dbo].[table1] (	[Book] [char] (10) NOT NULL,        [DateT] [datetime] NOT NULL ) ON [PRIMARY]GOINSERT INTO table1 (Book,DateT) VALUES('aaa', ' Jan 03 , 2001')GOINSERT INTO table1 (Book,DateT) VALUES('bbb', ' Dec 31 , 2000')GO				
em seguida, executar este código:
SELECT * FROM table1GO				
os comandos Transact-SQL anteriores produzem o seguinte resultado:

Book       DateT                                             ---------- ------------------------------------------------------ aaa        2001-01-03 00:00:00.000bbb        2000-12-31 00:00:00.000 				

Padrão de correspondência com o operador LIKE

Manuais online do SQL Server recomenda o uso o LIKE quando você procura valores de data/hora , porque as entradas de Data e hora podem conter uma variedade de partes de data. No entanto, uma seqüência de entrada inválida após o operador LIKE juntamente com o caractere curinga (%) pode causar resultados inesperados.

  • O exemplo a seguir mostra o operador LIKE converter uma seqüência de caracteres em uma Data e hora em uma consulta, que funciona:
    SELECT DateT, Book FROM table1 WHERE DateT LIKE 'Dec 31 2000%' ORDER BY DateTGO					
    o comando Transact-SQL anterior retorna o seguinte resultado:

    DateT                                                  Book      ------------------------------------------------------ ----------- 2000-12-31 00:00:00.000                                bbb       					


  • Se você executar o código a seguir, que tem uma seqüência de entrada incorreta '% 03 de janeiro de 2001', você não obtiver nenhum resultado:
    SELECT DateT, Book FROM table1 WHERE DateT LIKE 'Jan 03 2001%' ORDER BY DateT  GO					
    o comando Transact-SQL anterior não retorna nenhum resultado.

  • Se você executar o código a seguir, o que tem uma seqüência de entrada incorreta '% 3 de janeiro de 2001', não retornar nenhum resultado:
    SELECT DateT, Book FROM table1 WHERE DateT LIKE 'Jan 3 2001%' ORDER BY DateT GO					
    o comando Transact-SQL anterior não retorna nenhum resultado.

  • O exemplo de código a seguir insere o formato de seqüência de caracteres correto:
    SELECT DateT, Book FROM table1 WHERE DateT LIKE 'Jan  3 2001%' ORDER BY DateT GO					
    Observe que há dois espaços entre janeiro e 3.

    O comando Transact-SQL anterior retorna o seguinte resultado:
    DateT                                                  Book------------------------------------------------------ ---------- 2001-01-03 00:00:00.000                                aaa       					
como = % conversão datetime de seqüência

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 284997 - Última Revisão: 12/05/2015 23:48:01 - Revisão: 3.2

Microsoft SQL Server 2000 Standard Edition, Microsoft SQL Server 7.0 Standard Edition

  • kbnosurvey kbarchive kbmt kbprb KB284997 KbMtpt
Comentários