Sql 选择两个日期之间的行,该日期与adddate匹配

Sql 选择两个日期之间的行,该日期与adddate匹配,sql,sql-server,date,between,Sql,Sql Server,Date,Between,我在MSSQL服务器中有一个表,它将日期保存为bigInt类型,如1503381651490。现在我想选择在2017-01-01到2017-03-28之间创建_时间的行。我该怎么办 谢谢正如其他人所建议的,您应该以正确的格式存储日期时间 现在,假设存储的值是UNIX时间戳,您可以将所需的日期范围转换为UNIX时间戳: select * from your_table where created_time between datediff(minute,'1990-1-1','2017-01-01

我在MSSQL服务器中有一个表,它将日期保存为bigInt类型,如1503381651490。现在我想选择在2017-01-01到2017-03-28之间创建_时间的行。我该怎么办


谢谢

正如其他人所建议的,您应该以正确的格式存储日期时间

现在,假设存储的值是UNIX时间戳,您可以将所需的日期范围转换为UNIX时间戳:

select *
from your_table
where created_time between datediff(minute,'1990-1-1','2017-01-01')
                       and datediff(minute,'1990-1-1','2017-03-28')

首先,为了应用过滤器,您必须将bigint字段转换为Date。您可以使用下面的转换

10000000 * 24 * 60 * 60 = 864000000000

SELECT CAST((bigintvalue - 599266080000000000) / 864000000000 AS DATETIME) AS DateTimeConv;
之后,您可以在转换日期字段上应用过滤器。 比如说

SELECT CAST((created_time - 599266080000000000) / 864000000000 AS DATETIME) AS DateTimeConv
FROM Table1
WHERE DateTimeConv < MaxDateValue
      AND DateTimeConv > MinDateValue;

我解决了这个问题:

SELECT  "chdt"."CHANGEID" AS "Change ID",     "chdt"."CREATEDTIME" AS "Created 
Date", "chdt"."TITLE" AS "Title" FROM "ChangeDetails" "chdt"
WHERE  dateadd(s,("chdt"."CREATEDTIME" / 1000),'1970/01/01') >= '2017/10/01' 
AND (dateadd(s,("chdt"."CREATEDTIME" / 1000),'1970/01/01') <= '2017/10/05')

从这里开始使用正确的列数据类型…@jarlh此数据库不适用于我可能与UNIX时间戳的bigint值重复?将表达式转换为数据类型datetime时出现算术溢出错误。