Procurar comparar as datas em SQL
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= '2013-04-12'
esta consulta deve devolver tudo o que aconteceu no mês 11 (novembro) porque aconteceu antes da data '2013-04-12' (em dezembro)
Mas é só devolver as datas disponíveis que aconteceram em dias inferiores a 04 (2013-04-12) Será que só está a comparar a parte do dia? e não a data toda?Como corrigir isto?
Created_date é do tipo data
o formato da data é por omissão AAAA-dd-MM
7 answers
Em vez de '2013-04-12' cujo significado depende da cultura local, use '20130412' que é reconhecido como o formato invariante de cultura.
Se quiser comparar com 4 de dezembro , deve escrever '20131204'. Se quiser comparar com 12 de abril , deve escrever "20130412".
O artigo Escreve declarações Transact-SQL internacionais da documentação do servidor SQL explica como escrever declarações que são cultura invariante:
As aplicações que usam outras APIs, ou scripts Transact-SQL, procedimentos armazenados e gatilhos, devem usar as strings numéricas não separadas. Por exemplo, AAAAMMDD como 19980924.
EDITAR
Uma vez que você está usando ADO, a melhor opção é parameterizar a consulta e passar o valor da data como um parâmetro de data. Desta forma você evita a edição de formato inteiramente e ganha os benefícios de desempenho de consultas parametrizadas como bem.
Actualizar
Para usar o formato ISO 8601 num literal, todos os elementos devem ser especificados. Para citar a partir da secção ISO 8601 da documentação do datetime
Para usar o formato ISO 8601, deve indicar cada elemento no formato. Isto também inclui o T, os colões (:), e o período (.) que são mostrados no formato.
... a fração do segundo componente é opcional. O componente de tempo é especificado nas 24 horas formato.
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= '2013-12-04'
Se colocares {[[0]} e ele vai apanhar a data indicada também. Pode substituí-lo apenas por <
.
Se estiver a comparar apenas com a data vale, então convertê-la-á até à data (não datetime) irá funcionar
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= convert(date,'2013-04-12',102)
Esta conversão também é aplicável durante a utilização da função GetDate ()
Por favor tente com a pesquisa abaixo
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
convert(datetime, convert(varchar(10), created_date, 102)) <= convert(datetime,'2013-04-12')
Tente usar " # " antes e depois da data e certifique-se do formato de data do seu sistema. talvez "AAAAMMDD o AAAA-MM-DD o MM-DD-AAAA o usando' / o \ '"
Ex:
select id,numbers_from,created_date,amount_numbers,SMS_text
from Test_Table
where
created_date <= #2013-04-12#
O formato da data é AAAA-mm-dd. Então a consulta acima está procurando por registros com mais de 12Apr2013
Sugira que faça uma verificação rápida, definindo o texto da data para '2013-04-30', se não houver erro sql, o formato da data está confirmado para AAAA-mm-dd.