Select 昨天到今天的记录
Select records between yesterday and today
我试图实现一个简单的 SQL 查询来获取今天固定时间(例如 18:00)和昨天固定时间(例如 18:00)之间的记录。
SELECT * FROM [Table]
WHERE [Table].[Date Time] > Now()-1;
但是,这将 return 今天和昨天之间的所有记录。
有没有办法在指定时间return记录?
编辑:
我试过这个查询,但它抛出语法错误。
SELECT * FROM [Table]
WHERE [Date Time] BETWEEN FORMAT(DATEADD(DAY, - 1, NOW()) AS DATETIME) + FORMAT('18:00:00' AS TIME) AND FORMAT(NOW() AS DATETIME) + FORMAT('18:00:00' AS TIME);
有什么帮助吗?
你的意思是这样的?
SELECT *
FROM [Table]
WHERE [Table].[Date Time] between #16/11/2016 14:00:00# and #17/11/2016 14:00:00#
但要注意 MDY - DMY 日期格式..
我更喜欢ODBCC 格式以避免问题:
SELECT *
FROM [Table]
WHERE [Table].[Date Time] between {ts'1970-01-12 14:00:00' } and {ts'1975-01-12 14:00:00'}
尝试以下查询
declare
@StartDate DATE = NULL,
@EndDate DATE = NULL
SELECT * FROM [Table]
WHERE
CAST( [Date Time] AS DATE) >= CAST( ISNULL(@StartDate, '') AS DATE)
AND CAST( [Date Time] AS DATE) <= CAST( ISNULL(@EndDate, '') AS DATE)
或者简单地将日期输入@StartDate 和@EndDate。
您可能想先为今天 18:00 声明一个变量,然后将您的日期与该日期进行比较,在 Access 中,您可以使用 TimeValue() 函数:
Dim Time18
Time18 = TimeValue("18:00")
然后你可以将你的日期与那一天和前一天进行比较:
SELECT * FROM [Table]
WHERE (
(DateValue([Table].[Date Time]) = DateValue(Now() - 1) AND
TimeValue([Table].[Date Time]) >= Time18) OR
(DateValue([Table].[Date Time]) = DateValue(Now() AND
TimeValue([Table].[Date Time]) <= Time18))
使用 date() 而不是 now()
假设今天是 17nov(任何时间),
如果您需要昨天 16nov (00:00 -> 23:59) 的记录,您必须使用 date()-1 作为下限,使用 date() 作为上限
SELECT *
FROM [Table]
WHERE [Table].[Date Time] between date()-1 and date()
如果您需要今天 17nov (00:00 -> 23:59) 的记录,您必须使用 date() 作为下限和 date()+1 作为上限
SELECT *
FROM [Table]
WHERE [Table].[Date Time] between date() and date()+1
这是简单版本,边界有点问题,正确的过滤器应该是(昨天)
SELECT *
FROM [Table]
WHERE [Table].[Date Time] >= date()-1 [Table].[Date Time] < date()
或者,今天:
SELECT *
FROM [Table]
WHERE [Table].[Date Time] >= date() [Table].[Date Time] < date()+1
您可以尝试以下查询 SQL 服务器:
SELECT * FROM [Table]
WHERE DATEADD(HH, 18, CAST(CAST([Table].[Date Time] AS DATE) AS DATETIME)) > DATEADD(HH, 18, CAST(CAST(Now() AS DATE) AS DATETIME))-1;
您需要添加可变日期值和固定时间值。
Date/Time 常量可以随所有不同的本地格式变化无常。使用 TimeSerial
我们可以避免这种情况:
SELECT *
FROM [Table]
WHERE [Table].[Date Time] Between Date()-1 + TimeSerial(18,0,0)
And Date() + TimeSerial(18,0,0)
(第一个建议,适用于德语日期格式)
SELECT *
FROM [Table]
WHERE [Table].[Date Time] Between Date()-1 + #18:00:00# And Date() + #18:00:00#
查询设计器可能会自动将其更改为
Between Date()-1 + #12/30/1899 18:00:00# And Date() + #12/30/1899 18:00:00#
1899-12-30
在 Access 中是 "Date zero"。
我试图实现一个简单的 SQL 查询来获取今天固定时间(例如 18:00)和昨天固定时间(例如 18:00)之间的记录。
SELECT * FROM [Table]
WHERE [Table].[Date Time] > Now()-1;
但是,这将 return 今天和昨天之间的所有记录。
有没有办法在指定时间return记录?
编辑: 我试过这个查询,但它抛出语法错误。
SELECT * FROM [Table]
WHERE [Date Time] BETWEEN FORMAT(DATEADD(DAY, - 1, NOW()) AS DATETIME) + FORMAT('18:00:00' AS TIME) AND FORMAT(NOW() AS DATETIME) + FORMAT('18:00:00' AS TIME);
有什么帮助吗?
你的意思是这样的?
SELECT *
FROM [Table]
WHERE [Table].[Date Time] between #16/11/2016 14:00:00# and #17/11/2016 14:00:00#
但要注意 MDY - DMY 日期格式..
我更喜欢ODBCC 格式以避免问题:
SELECT *
FROM [Table]
WHERE [Table].[Date Time] between {ts'1970-01-12 14:00:00' } and {ts'1975-01-12 14:00:00'}
尝试以下查询
declare
@StartDate DATE = NULL,
@EndDate DATE = NULL
SELECT * FROM [Table]
WHERE
CAST( [Date Time] AS DATE) >= CAST( ISNULL(@StartDate, '') AS DATE)
AND CAST( [Date Time] AS DATE) <= CAST( ISNULL(@EndDate, '') AS DATE)
或者简单地将日期输入@StartDate 和@EndDate。
您可能想先为今天 18:00 声明一个变量,然后将您的日期与该日期进行比较,在 Access 中,您可以使用 TimeValue() 函数:
Dim Time18
Time18 = TimeValue("18:00")
然后你可以将你的日期与那一天和前一天进行比较:
SELECT * FROM [Table]
WHERE (
(DateValue([Table].[Date Time]) = DateValue(Now() - 1) AND
TimeValue([Table].[Date Time]) >= Time18) OR
(DateValue([Table].[Date Time]) = DateValue(Now() AND
TimeValue([Table].[Date Time]) <= Time18))
使用 date() 而不是 now()
假设今天是 17nov(任何时间),
如果您需要昨天 16nov (00:00 -> 23:59) 的记录,您必须使用 date()-1 作为下限,使用 date() 作为上限
SELECT *
FROM [Table]
WHERE [Table].[Date Time] between date()-1 and date()
如果您需要今天 17nov (00:00 -> 23:59) 的记录,您必须使用 date() 作为下限和 date()+1 作为上限
SELECT *
FROM [Table]
WHERE [Table].[Date Time] between date() and date()+1
这是简单版本,边界有点问题,正确的过滤器应该是(昨天)
SELECT *
FROM [Table]
WHERE [Table].[Date Time] >= date()-1 [Table].[Date Time] < date()
或者,今天:
SELECT *
FROM [Table]
WHERE [Table].[Date Time] >= date() [Table].[Date Time] < date()+1
您可以尝试以下查询 SQL 服务器:
SELECT * FROM [Table]
WHERE DATEADD(HH, 18, CAST(CAST([Table].[Date Time] AS DATE) AS DATETIME)) > DATEADD(HH, 18, CAST(CAST(Now() AS DATE) AS DATETIME))-1;
您需要添加可变日期值和固定时间值。
Date/Time 常量可以随所有不同的本地格式变化无常。使用 TimeSerial
我们可以避免这种情况:
SELECT *
FROM [Table]
WHERE [Table].[Date Time] Between Date()-1 + TimeSerial(18,0,0)
And Date() + TimeSerial(18,0,0)
(第一个建议,适用于德语日期格式)
SELECT *
FROM [Table]
WHERE [Table].[Date Time] Between Date()-1 + #18:00:00# And Date() + #18:00:00#
查询设计器可能会自动将其更改为
Between Date()-1 + #12/30/1899 18:00:00# And Date() + #12/30/1899 18:00:00#
1899-12-30
在 Access 中是 "Date zero"。