我必须使用dd-MM-YY格式作为输入按日期过滤查询结果,当我运行查询时,它给了我一个空表,我该如何解决?
select Data, string_agg(Ore, ' ') as Ore
from (
select FORMAT(DataCreazione, 'dd/MM/yyyy', 'it-IT') as Data,
CONCAT(DATEPART(HOUR,DataCreazione), ':', DATEPART(MINUTE, DataCreazione)) as
Ore
from Marcatura
where IdUtente = @IdUtente
and (Stato='Ingresso' or Stato='Uscita')
and (CONVERT(datetime, DataCreazione, 103)
between CONVERT(datetime, @Start, 103)
and CONVERT(datetime, @End, 103))
) t
group by Data
order by CONVERT(datetime, Data, 103) desc
输入值:
@IdUtente=2
@End='14-09-19'
@Start='05-02-19'
答案 0 :(得分:3)
您的开始日期和结束日期均为有效的SQL格式。您可以将其转换为日期时间,但是我们需要告诉SQL原始日期是哪种格式。
cast(CONVERT(VARCHAR(10), CONVERT(date, @Start, 5), 23) as datetime)
完整查询:
select Data, string_agg(Ore, ' ') as Ore
from (
select FORMAT(DataCreazione, 'dd/MM/yyyy', 'it-IT') as Data,
CONCAT(DATEPART(HOUR,DataCreazione), ':', DATEPART(MINUTE, DataCreazione)) as
Ore
from Marcatura
where IdUtente = @IdUtente
and (Stato='Ingresso' or Stato='Uscita')
and cast(DataCreazion as DateTime)
between cast(CONVERT(VARCHAR(10), CONVERT(date, @Start, 5), 23) as datetime)
and cast(CONVERT(VARCHAR(10), CONVERT(date, @End, 5), 23) as datetime)
) t
group by Data
order by CONVERT(datetime, Data, 5) desc
答案 1 :(得分:0)
相反,您可以像下面那样设置连接级别属性。
SET DATEFORMAT DMY;
SELECT Data
,string_agg(Ore, ' ') AS Ore
FROM (
SELECT FORMAT(DataCreazione, 'dd/MM/yyyy', 'it-IT') AS Data
,CONCAT (DATEPART(HOUR, DataCreazione),':',DATEPART(MINUTE, DataCreazione)) AS Ore
FROM Marcatura
WHERE IdUtente = @IdUtente
AND (Stato = 'Ingresso' OR Stato = 'Uscita')
AND (
DataCreazione BETWEEN @Start and @End
)
) t
GROUP BY Data
ORDER BY CONVERT(DATETIME, Data, 103) DESC