我有一个varchar(25)类型的“Uploaded”列。它具有日期时间值。由于存储在此列中的字符串不是有效日期(前端正在传递它们。对此没有控制权),因此将其保留为varchar(25)。存储在其中的字符串如下:
2016:04:14 21:20:35
2016:04:14 21:20:35
2016:04:14 21:20:35
。
。
点。
我需要在搜索查询中比较这些值
Select * from Table where [Uploaded] BETWEEN @StartDate AND @EndDate
@StartDate和@EndDate是日期类型变量。显然上面的查询不起作用。所以,我有两种方式: 1.编写正确的查询,可以将传递的日期类型变量与“已上载”列进行比较。 2.更新[已上载]列值并将其重新存储为有效的日期时间类型。
如何实现?有人可以帮我写正确的搜索查询或更新所有记录以将它们转换为有效的日期时间类型吗?
答案 0 :(得分:0)
如果您在:
字段中的年,月,日之间得到[Uploaded]
,请使用此字段:
SELECT *
FROM Table
WHERE CAST(REPLACE(LEFT([Uploaded],10),':','-') as date) BETWEEN @StartDate AND @EndDate
如果需要datetime
:
SELECT *
FROM Table
WHERE CAST(REPLACE(LEFT([Uploaded],10),':','-') + RIGHT([Uploaded],9) as datetime) BETWEEN @StartDate AND @EndDate
答案 1 :(得分:0)
这将为您提供准确的结果。
select * from Table where cast(replace(left([Upholded],10),':','-')+right([Upholded],len([Upholded]-10) as datetime) between @StartDate AND @EndDate
答案 2 :(得分:-1)
您可以将字符串数据转换为日期时间值,然后使用日期时间比较
Select * from Table where CAST( [Uploaded] as Date) BETWEEN @StartDate AND @EndDate
确保您使用正确的格式进行日期转换,您应该是金色的。
这里有更多信息:https://msdn.microsoft.com/en-us/library/ms187819.aspx