Gostaria de fazer um select filtrando pelo ms de um campo date no Sqlite.
A ideia e a seguinte: tenho uma janela que peo para informar o ms de aniversario em um textfield, com o ms informado no caixa de texto fao um filtro na tabela de cliente onde tenho um campo data_nascimento no formato date. Como seria este Select ?
Em Visual Fox linguagem que estou acostumado a trabalhar ficaria assim.
Select * from clientes where month(clientes.data_nascimento) = int(Textfield.text) // O retorno da Funo Month numrico, transformo o contedo do textfield em numero com a funo int.
Andei olhando a documentao do SQlite no vi nenhum exemplo que esclarecesse minha duvida.
[quote=208090:@Cauby Osorio]Gostaria de fazer um select filtrando pelo mês de um campo date no Sqlite.
A ideia e a seguinte: tenho uma janela que peço para informar o mês de aniversario em um textfield, com o mês informado no caixa de texto faço um filtro na tabela de cliente onde tenho um campo data_nascimento no formato date. Como seria este Select ?
Em Visual Fox linguagem que estou acostumado a trabalhar ficaria assim.
Select * from clientes where month(clientes.data_nascimento) = int(Textfield.text) // O retorno da Função Month é numérico, transformo o conteúdo do textfield em numero com a função int.
Andei olhando a documentação do SQlite não vi nenhum exemplo que esclarecesse minha duvida.[/quote]
Bom dia,
A forma correta é esta:
SELECT * FROM table name
WHERE strftime(’%m’, date column
) = ‘04’
Onde date column obviamente é o seu campo data. O único porém, e disso não tenho certeza, só fazendo testes mesmo, é que é necessário ter o zero a esquerda para isso funcionar. Se colocasse ‘4’ ao invés de ‘04’, possivelmente não daria certo.
Mas como disse, você precisa testar.
Abraço
Mais uma vez obrigado Adelar.
S tive que mudar um pouco o Select ficou assim:
Dim mesaniversario As String
mesaniversario = TxtMesAniv.Text
sql = “SELECT Cliente.Id, Cliente.nome, Cliente.Telefone, strftime(’%d -%m -%Y’,Cliente.nascimento) as Nascimento "
sql = sql + “FROM cliente WHERE strftime(’%m’,Cliente.nascimento) = '”+mesaniversario+”’ ORDER BY id ;"
Ainda brigo um pouco com o Select, no visual Fox eu faria o Select diretamente no precisava passar uma string. Ainda me perco um pouco com essa coisa de concatenar varivel na String passada.
Mais seu exemplo foi show.
Obrigado.
S para servir de opo, voc tambm pode passar o sql direto, no comando mydb.SqlSelect(“clausula sql”)… Mas ainda ter que concatenar as variveis…
Outra maneira que melhora um pouco a legibilidade, voc no usar o sql = sql + “continuao do sql”.
Voc pode usar assim:
sql = "SELECT Cliente.Id , Cliente.nome, strftime('%d -%m -%Y',Cliente.nascimento) as Nascimento " _
+ "FROM cliente WHERE strftime('%m',Cliente.nascimento) = '"+mesaniversario+"' ORDER BY id ;"
Ou seja, colocando um underline (trao baixo) no final da linha, e comeando a prxima com um sinal de “+”, voc no precisa ficar repetindo o nome da varivel e concatenando pedaos da sua clausula sql…