我在将nvarchar转换为日期时遇到了问题。
列标题为“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的值,因此结果包括:
问题是这些年被忽略了。
答案 0 :(得分: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,您可以使用CAST
或CONVERT
代替STR_To_DATE
https://msdn.microsoft.com/en-us/library/ms187928(v=sql.90).aspx
答案 1 :(得分:0)
根据Allen Allen的建议,我能够查看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