If your column dt_item
be as varchar
in format dd/MM/yyyy
:
SELECT *
FROM TAB_FATURAMENTO
WHERE cd_cliente LIKE '%'
AND CONVERT(DATE, dt_item, 103) BETWEEN CONVERT(DATE, '15/05/2017', 103) AND CONVERT(DATE, '31/05/2017', 103);
So you will turn the 3 parts into date and be able to perform the comparison correctly.
In the link below CAST and CONVERT (Transact-SQL) - Date and time styles from the documentation you can check the codes corresponding to the date conversions;
Conversions available:
╔═════════════════╦═══════════════════╦═══════════════════════════════════╦════════════════════════════════════════╗
║ Sem século (AA) ║ Com século (aaaa) ║ Standard ║ Entrada/saída (3) ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ - ║ 0 ou 100 (1,2) ║ Padrão para datetime e ║ mês dd aaaa hh:miAM (ou PM) ║
║ ║ ║ smalldatetime ║ ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 1 ║ 101 ║ EUA ║ 1 = mm/dd/aa ║
║ ║ ║ ║ 101 = mm/dd/aaaa ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 3 ║ 103 ║ Britânico/francês ║ 3 = dd/mm/aa ║
║ ║ ║ ║ 103 = dd/mm/aaaa ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 4 ║ 104 ║ Alemão ║ 4 = dd.mm.aa ║
║ ║ ║ ║ 104 = dd.mm.aaaa ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 5 ║ 105 ║ Italiano ║ 5 = dd-mm-aa ║
║ ║ ║ ║ 105 = dd-mm-aaaa ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 6 ║ 106 (1) ║ - ║ 6 = dd mês aa ║
║ ║ ║ ║ 106 = dd mês aaaa ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 7 ║ 107 (1) ║ - ║ 7 = Mês dd, aa ║
║ ║ ║ ║ 107 = Mês dd, aaaa ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 8 ║ 108 ║ - ║ hh:mi:ss ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ - ║ 9 ou 109 ║ Padrão + milissegundos ║ mês dd aaaa hh:mi:ss:mmmAM (ou PM) ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 10 ║ 110 ║ EUA ║ 10 = mm-dd-aa ║
║ ║ ║ ║ 110 = mm-dd-aaaa ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 11 ║ 111 ║ JAPÃO ║ 11 = aa/mm/dd ║
║ ║ ║ ║ 111 = aaaa/mm/dd ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 12 ║ 112 ║ ISO ║ 12 = aammdd ║
║ ║ ║ ║ 112 = aaaammdd ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ - ║ 13 ou 113 ║ Padrão Europa + milissegundos ║ dd mês aaaa hh:mi:ss:mmm (24h) ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ 14 ║ 114 ║ - ║ hh:mi:ss:mmm(24h) ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ - ║ 20 or 120 (2) ║ ODBC canônico ║ aaaa-mm-dd hh:mi:ss(24h) ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ - ║ 21 or 121 (2) ║ ODBC canônico (com milissegundos) ║ aaaa-mm-dd hh:mi:ss(24h) ║
║ ║ ║ padrão para hora, data, datetime2 ║ ║
║ ║ ║ e datetimeoffset ║ ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ - ║ 126 (4) ║ ISO8601 ║ aaaa-mm-ddThh:mi:ss.mmm (sem espaços) ║
║ ║ ║ ║ ║
║ ║ ║ ║ Observação: Quando o valor de ║
║ ║ ║ ║ milissegundos (mmm) for 0, o valor de ║
║ ║ ║ ║ milissegundos não é exibido. Por ║
║ ║ ║ ║ exemplo, o valor ║
║ ║ ║ ║ '2012-11-07T18:26:20.000' é exibido ║
║ ║ ║ ║ como '2012-11-07T18:26:20'. ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ - ║ 127(6, 7) ║ ISO8601 com fuso horário Z. ║ aaaa-mm-ddThh:mi:ss.mmmZ (sem espaços) ║
║ ║ ║ ║ ║
║ ║ ║ ║ Observação: Quando o valor de ║
║ ║ ║ ║ milissegundos (mmm) for 0, o valor de ║
║ ║ ║ ║ milissegundos não é exibido. Por ║
║ ║ ║ ║ exemplo, o valor ║
║ ║ ║ ║ '2012-11-07T18:26:20.000' é exibido ║
║ ║ ║ ║ como '2012-11-07T18:26:20'. ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ - ║ 130 (1, 2) ║ Hijri (5) ║ dd mmm aaaa hh:mi:ss:mmmAM ║
║ ║ ║ ║ ║
║ ║ ║ ║ Neste estilo, mon representa uma ║
║ ║ ║ ║ representação unicode Hijri de vários ║
║ ║ ║ ║ tokens do nome completo do mês. Este ║
║ ║ ║ ║ valor não será renderizado corretamente║
║ ║ ║ ║ em uma instalação US padrão do SSMS. ║
╠═════════════════╬═══════════════════╬═══════════════════════════════════╬════════════════════════════════════════╣
║ - ║ 131 (2) ║ Hijri (5) ║ dd/mm/aaaa hh:mi:ss:mmmAM ║
╚═════════════════╩═══════════════════╩═══════════════════════════════════╩════════════════════════════════════════╝
- (1) these style values return nondeterministic results. Include all styles (aa) (no century) and a subset of styles (aaaa) (with century).
- (2) The standard values (style0 or 100, 9 or 109, 13 or 113, 20 or 120, and 21 or 121) always return the century (yyyy).
- (3) input when you convert to datetime; output when you convert character data.
- (4) designed for XML use. For conversion of datetime or smalldatetime output format character data is as described in the previous table.
- (5) Hijri is a calendar system with many variations. SQL Server uses the Kuwaiti algorithm.
If I understand correctly, the column
dt_item
It’s like varchar, right?– Oralista de Sistemas
If your date is like varchar, first you have to convert all to the date format (xx/xx/xxxx -> xxxx-xx-xx) and then convert the field type to date.
– Lucas Thibau Paulino
That’s right @Renan, my field
dt_item
it’s like varchar... and because of that, I can’t perform my search properly.– Tony Anderson
@Tonyanderson, if the dt_item column is as varchar, what is the storage format: dd/mm/yyyy? yyyymmdd? other? // What you want with the restriction {WHERE cd_client like '%'} ?
– José Diz
@Josédiz, the values are stored as
dd/mm/aaaa
// {WHERE cd_client like '%'}, searches all clients.– Tony Anderson
@Tonyanderson: As the date is stored in the character column and in the dd/mm/yyyy format, it is necessary that, in the WHERE clause, the contents of the column be converted to another format that can be directly compared to date intervals. One option is to convert to data type
date
before comparing with the limits, also asdate
. // If it’s to list all clients, I suggest you remove the restriction thencd_cliente like '%'
of the WHERE clause.– José Diz
@Tonyanderson It is not a good idea to change the question so radically after receiving so many answers. If you now need something for Firebird, open a new question. It would be unfair to invalidate everyone’s answer because you have now decided to change the question tag.
– Jéf Bueno
@jbueno, as you suggested, I asked a new question:
Como converter datas em varchar para date no SQL 'Firebird'?
.– Tony Anderson
Has any response helped solve the problem and can address similar questions from other users? If so, make sure to mark the answer as accepted. To do this just click on the left side of it (below the indicator of up and down votes).
– Sorack