我有一个相对基本的查询,即将表中的日期保存为nvarchar(200)。
我正在尝试对InteractionDate字段执行如下所示的筛选
'02-03-2018 12:00', '03-04-2018 14:46', '03-04-2018 14:44' etc.但是,当试图转换nvarchar字段时,请获取错误Conversion failed when converting date and/or time from character string.。
这就是查询的样子。
select
act.InteractionDate,
act.Status
from JobCanvas_B2B canvas
inner join PersonActivity_JobCanvas inters on inters.CanvasId =
canvas.CanvasId
inner join PersonActivity act on act.PersonActivityId =
inters.PersonActivityId
inner join Stage s on s.StageId = act.StageId
where convert(date, act.InteractionDate, 101) > convert(date, '01-01-2018 12:00', 101)如何正确地进行此日期转换以使查询工作?
发布于 2018-07-02 06:44:50
如果您只能容忍处理日期组件,那么请使用掩码103,就像您在回答中所做的那样。如果您还需要时间组件,那么我们可以尝试使用格式掩码120,并在此过程中进行一些字符串操作:
CONVERT(datetime, SUBSTRING(act.InteractionDate, 7, 4) + '-' +
SUBSTRING(act.InteractionDate, 4, 2) + '-' + LEFT(act.InteractionDate, 2) +
' ' + RIGHT(act.InteractionDate, 5), 120)
Demo
理想情况下,我们应该能够直接使用掩码131,但我无法让它工作,至少不能用您所拥有的数据类型。相反,上面的片段手动构建了yyyy-mm-dd hh:mi:ss格式的时间戳。
这里最好的长期解决方案是不要将日期信息存储为文本。如果您必须这样做,那么您的ISO格式就很容易与Server内置的函数进行转换。
发布于 2018-07-02 06:40:08
这招成功了,
where convert(date, act.InteractionDate, 103) > convert(date, '01-01-2018 12:00', 103)https://stackoverflow.com/questions/51130085
复制相似问题