em MySQL
select * from record where register_date like '2009-10-10%'
Qual é a sintaxe do SQL Server?
sql-server
sql-like
Paisal
fonte
fonte
DATETIME
valores como strings e por que pode ser ruim usarBETWEEN
ou>= AND <=
), consulte este blog de Aaron Bertrand .5
votos para a tag de operador semelhante . Posso pedir que você sugira sql-like como sinônimo ?Respostas:
Você pode usar a função DATEPART ()
Acho essa maneira fácil de ler, pois ignora o componente de tempo e você não precisa usar a data do dia seguinte para restringir sua seleção. Você pode ir para uma granularidade maior ou menor adicionando cláusulas extras, usando o código DatePart apropriado, por exemplo
para obter registros feitos entre 12 e 1.
Consulte os documentos MSDN DATEPART para obter a lista completa de argumentos válidos.
fonte
Não há suporte direto para o operador LIKE em relação às variáveis DATETIME, mas você sempre pode converter DATETIME para um VARCHAR:
Verifique os documentos do MSDN para obter uma lista completa dos "estilos" disponíveis na função CONVERTER.
Marc
fonte
WHERE CONVERT(VARCHAR(25), register_date, 25) LIKE '2009-10-10%'
Se você fizer isso, você o está forçando a fazer uma conversão de string. Seria melhor criar um intervalo de datas de início / término e usar:
Isso permitirá que ele use o índice (se houver
register_date
), em vez de uma varredura de tabela.fonte
Você pode usar CONVERT para obter a data em formato de texto. Se você convertê-lo em um varchar (10), pode usar = em vez de:
Ou você pode usar uma data limite superior e inferior, com a vantagem adicional de poder usar um índice:
fonte
Infelizmente, não é possível comparar datetime em relação ao varchar usando 'LIKE', mas a saída desejada é possível de outra maneira.
fonte
Você também pode usar convert para tornar a data pesquisável usando LIKE. Por exemplo,
fonte
O
LIKE
operador não trabalha com partes de data como mês ou data, mas oDATEPART
operador sim.Comando para descobrir todas as contas cuja data de abertura foi no dia 1º:
* CASTING
OpenDt
porque seu valor está dentroDATETIME
e não justoDATE
.fonte
Há uma cobertura muito irregular do operador LIKE para datas no SQL Server. Só funciona no formato de data americano. Como exemplo, você pode tentar:
Eu testei isso no SQL Server 2005 e funciona, mas você realmente precisará tentar combinações diferentes. Coisas estranhas que notei são:
Você parece obter tudo ou nada para diferentes subcampos dentro da data, por exemplo, se você pesquisar 'abril 2%', você obterá apenas algo no dia 20 - ele omite o segundo.
Usando um único sublinhado '_' para representar um único caractere (wildcard) não inteiramente trabalho, por exemplo,
WHERE mydate LIKE 'oct _ 2010%'
vai não voltar todas as datas antes de o 10º - ele retorna nada, na verdade!O formato é americano rígido: '
mmm dd yyyy hh:mm
'Achei difícil definir um processo por LIKEing segundos, então, se alguém quiser ir um pouco mais longe, fique à vontade!
Espero que isto ajude.
fonte
Estou um pouco atrasado para este tópico, mas na verdade há suporte direto para o operador semelhante no servidor MS SQL.
Conforme documentado na ajuda do LIKE, se o tipo de dados não for uma string, será tentado convertê-lo em uma string. E conforme documentado na documentação cast \ convert:
Se você tiver uma data como esta no DB:
e você faz consultas como esta:
você obtém essa linha.
No entanto, este formato de data sugere que é um DateTime2 , então a documentação diz:
Isso torna tudo mais fácil e você pode usar:
e obter o registro da fatura. Aqui está um código de demonstração:
Fazer pesquisas de data e hora no servidor SQL sem qualquer conversão em string sempre foi problemático. Obter cada parte da data é um exagero (o que provavelmente não usaria um índice). Provavelmente, a melhor maneira quando você não usa a conversão de string seria usar verificações de intervalo. ie:
fonte
Tente isto
fonte
Resolvi meu problema dessa forma. Obrigado por sugestões de melhorias. Exemplo em C #.
fonte