我有一个带有事务表的Server 2008数据库。有一个字段定义为NVARCHAR(16)。存储的数据是按如下格式格式化的日期和时间: 2016100708593100
我需要编写一个查询,它查看该字段并在两个日期之间提取数据。
select ... from...where convert(varchar,
convert(datetime,left(a.xact_dati,8)),101)
between '9/29/2016' and '10/05/2016'我尝试过其他转换,但没有返回任何数据。如果我使用>=getdate()-1,我会得到数据,所以我应该看到一些返回的内容。有什么建议吗?
发布于 2016-10-07 13:18:15
将WHERE条款替换为
... WHERE CONVERT(DATETIME,LEFT(a.xact_dati,8)) BETWEEN '9/29/2016' AND '10/05/2016'发布于 2016-10-07 13:14:21
假设刚开始
where cast(left('2016100708593100', 8) as date) between '20160929' and '20161005'注意,这个子句不满意。
发布于 2016-10-07 13:19:14
问题是,您正在尝试与varchar数据进行日期比较。
您可以将初始值转换为datetime,然后返回到varchar。
您可以依赖Sql隐式地将中间参数转换为datetime。
select 'matched',convert(datetime,left('2016100708593100',8),112)
where convert(datetime,left('2016100708593100',8),112) between '2016/09/29' and '2016/10/10'https://stackoverflow.com/questions/39918054
复制相似问题