如何将varchar转换为SQL Server中的可用日期?

问题描述:

我有一个问题将nvarchar转换为日期。如何将varchar转换为SQL Server中的可用日期?

列标题为'DOS',日期格式为'05-03-2012'。

我想转换为一个日期,所以我可以在where子句中过滤。

我已经看到使用'CONVERT(datetime,DOS,101)'的解释,但我不确定这会去哪里?在选择?在where子句中?这是将varchar转换为日期的最佳方法吗?

select BedSize, avg(contributionmargin) as ContributionMargin from Summary where DOS > '06-30-2016' group by bedsize having avg(contributionmargin) > 10000 order by contributionmargin desc

在这个例子中,where子句只是看在日期的“06”,并选择是比06更大的值,所以结果包括:

  • 07/01/2013
  • 07/02/2009
  • 2009年8月31日
  • 2012年9月25日
  • 2016年11月3日
  • 12/03/2008

的问题是,这些年来被忽略。

+1

发表您的查询,您要使用。 –

选项1:

添加一个新的日期时间列(让我们假设DOSDate)表中,然后运行该查询

update mytable set DOSDate = STR_TO_DATE(DOS,'%m-%d-%Y') 

但在mytable的未来刀片还将需要转换并存储在DOSDate`列。

选项2:

如果您不能添加新列,在where条款

select * from mytable where STR_TO_DATE(DOS,'%m-%d-%Y') > p_mydate 

使用这个因为我们还没有提供查询,上面是一个简单的查询,以说明这一点。

更新

最初,您标记了与MySQL相关的问题。对于SQL Server,您可以使用CASTCONVERT而不是STR_To_DATEhttps://msdn.microsoft.com/en-us/library/ms187928(v=sql.90).aspx

+0

对不起,这是用于SQL Server 2016.我不小心把标题作为mySQL。 Appologies – MartyB

+0

你的第二个选择是我正在寻找的(这是一个只读数据库),但是对于SQL Server。 – MartyB

Per Allen King的建议,我能够查看SQL Server的转换函数。

此代码:

select BedSize, avg(contributionmargin) as ContributionMargin 
from Summary 
where Convert(Date, DOS, 101) > '06-30-2016' 
group by bedsize 
having avg(contributionmargin) > 10000 
order by contributionmargin desc