将Varchar()转换为Date?

时间:2019-02-12 16:16:45

标签: tsql

查询表格和我要使用的过滤器之一的日期是19年2月8日到19年2月10日之间。无论出于何种原因,我为此过滤器使用的表都有一个Varchar(50)列,看起来像DateTime 120样式(yyyy-dd-mm hh:mm:ss.fff)。如何将其转换为日期(mm / dd / yy)格式?如果它是真实的DateTime,通常将其转换为Date。

到目前为止,我已经尝试过:

select convert(varchar(50), a.alpha, 1), a.bravo, sum(a.charlie)
from table a
where convert(varchar(50), a.alpha, 1) between '02/08/19' and '02/10/19'
group by convert(varchar(50), a.alpha, 1), a.bravo
order by sum(a.charlie)

这似乎没有任何记录。然后,我将其切换为120而不是1,并将过滤器切换为'2019-02-08 00:00:00.000'和'2019-02-10 00:00:00.000',它起作用了,但这不是格式我需要。我试过将这些转换转换为日期,即cast(convert(varchar(50),a.alpha,1)转换为日期),但也没有用。

我现在该怎么办?

谢谢

1 个答案:

答案 0 :(得分:0)

您正在尝试将varchar转换为varchar,而应将其转换为日期。即使在这种情况下,转换也将失败,因此您可以执行两次转换以使其过滤没有错误。这应该为您工作:

SELECT CONVERT(CONVERT(date, a.alpha),1), a.bravo, sum(a.charlie)
FROM table a
WHERE CONVERT(CONVERT(date, a.alpha),1) BETWEEN '02/08/19' and '02/10/19'
GROUP BY convert(convert(date, a.alpha),1) , a.bravo
ORDER BY sum(a.charlie)