Procurar comparar as datas em SQL

Tenho uma mesa com datas que aconteceram no mês de novembro. Eu escrevi esta pergunta

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

Author: HelpASisterOut, 2013-11-12

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.

 55
Author: Panagiotis Kanavos, 2015-09-11 08:22:51
Tenta assim.
select id,numbers_from,created_date,amount_numbers,SMS_text 
from Test_Table
where 
created_date <= '2013-12-04'
 20
Author: Nithesh, 2013-11-12 08:32:12

Se colocares {[[0]} e ele vai apanhar a data indicada também. Pode substituí-lo apenas por <.

 4
Author: Kuzgun, 2013-11-12 08:33:08

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 ()

 4
Author: Bimzee, 2016-04-13 12:35:27

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')
 2
Author: Naresh Pansuriya, 2013-11-12 08:32:29

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#
 1
Author: Ren Marín, 2017-01-31 02:03:18

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.

 0
Author: Bowie, 2013-11-12 08:31:24