Sql 今天无法获取';s记录
我想检查到今天的日期表中是否已经存在任何记录,并且我的Sql 今天无法获取';s记录,sql,sql-server,Sql,Sql Server,我想检查到今天的日期表中是否已经存在任何记录,并且我的sql server在美国 我尝试了下一个查询,但是我得到了0条记录,尽管今天的表中有23条记录 插入码 public void InsertSmsDetails() { DateTime today=TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,TimeZoneInfo.FindSystemTimeZoneById(“印度标准时间”); 字符串usecase=“沙井\金奈”; SqlConn
sql server
在美国
我尝试了下一个查询,但是我得到了0条记录,尽管今天的表中有23条记录
插入码
public void InsertSmsDetails()
{
DateTime today=TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,TimeZoneInfo.FindSystemTimeZoneById(“印度标准时间”);
字符串usecase=“沙井\金奈”;
SqlConnection con=新的SqlConnection(ConfigurationManager.ConnectionString[“constr”].ConnectionString);
con.Open();
SqlCommand cmd=新的SqlCommand(“插入sms(updtd_日期、用例、sms)值(“+today+”、“+usecase+”、“+TempData[“SMSBody”].ToString()+”)、con);
尝试
{
cmd.ExecuteNonQuery();
}
}
查询以获取数据
SELECT *
FROM SMS
where updtd_date > CONVERT(date,GETDATE())
and usecase = 'manhole_Chennai'
请注意,updtd_date
列的类型为datetime
样本数据:
2018-03-05 12:35:15.000 manhole_Chennai 11383 Alert : Manhole is filled 6.41666666666667 at time02/05/2018 16:11:09 NULL NULL
2018-03-05 12:34:40.000 manhole_Chennai 11382 Alert : Manhole is filled 6.41666666666667 at time02/05/2018 16:11:09 NULL NULL
2018-03-05 12:34:07.000 manhole_Chennai 11381 Alert : Manhole is filled 6.41666666666667 at time02/05/2018 16:11:09 NULL NULL
2018-03-05 12:33:33.000 manhole_Chennai 11380 Alert : Manhole is filled 6.41666666666667 at time02/05/2018 16:11:09 NULL NULL
2018-03-05 12:32:58.000 manhole_Chennai 11379 Alert : Manhole is filled 6.41666666666667 at time02/05/2018 16:11:09 NULL NULL
2018-03-05 12:32:21.000 manhole_Chennai 11378 Alert : Manhole is filled 6.41666666666667 at time02/05/2018 16:11:09 NULL NULL
您请求的记录大于今天日期 如果您想要今天的记录:
SELECT *
FROM SMS
where CAST(updtd_date) = CAST(getdate())
and usecase ='manhole_Chennai'
今天和未来的记录:
SELECT * FROM SMS where updtd_date >= CONVERT(date,GETDATE()) and usecase ='manhole_Chennai'
您请求的记录大于今天的日期 如果您想要今天的记录:
SELECT *
FROM SMS
where CAST(updtd_date) = CAST(getdate())
and usecase ='manhole_Chennai'
今天和未来的记录:
SELECT * FROM SMS where updtd_date >= CONVERT(date,GETDATE()) and usecase ='manhole_Chennai'
当前查询应返回
updtd_date
为今天或更高日期的所有记录。
为了防止将来获取记录,您需要添加另一个条件
首先,创建并填充样本表(请在以后的问题中保存此步骤):
查询:
SELECT Id,
updtd_date
FROM @T
WHERE updtd_date > CAST(GETDATE() AS DATE)
AND updtd_date < DATEADD(DAY, 1, CAST(GETDATE() AS DATE))
ORDER BY id
您当前的查询应该返回
updtd\u date
是今天或更晚的所有记录。
为了防止将来获取记录,您需要添加另一个条件
首先,创建并填充样本表(请在以后的问题中保存此步骤):
查询:
SELECT Id,
updtd_date
FROM @T
WHERE updtd_date > CAST(GETDATE() AS DATE)
AND updtd_date < DATEADD(DAY, 1, CAST(GETDATE() AS DATE))
ORDER BY id
很抱歉反应太晚。您的问题很简单:正如我看到的InsertSmsDetails()代码一样,您的代码适用于印度时区(硬编码) 然后,你的服务器在美国。这里有巨大的时区差异。它的原因,为什么你看不到记录 为了解决您的问题,您不能使用GETDATE(),因为它返回USA datetime。保存表格数据时,请记住India datetime偏移量。在这种情况下,您需要将这两个日期时间概括为可比较的 比方说,您的HARDCODE印度标准时间日期时间偏移量为UTC+5:30(或+330,单位为分钟)。然后你可以用这个来解决你的问题:
select
*
from
[sms]
where
[updtd_date] > convert(date, switchoffset(sysdatetimeoffset(), 330))
and [usecase] = 'manhole_Chennai';
请记住,您在夏季/冬季时间切换方面可能会遇到问题。因此,请尝试修改代码以使用偏移量值保存所有日期(即使用datetimeoffset数据类型而不是datetime)很抱歉响应太晚。您的问题很简单:正如我看到的InsertSmsDetails()代码一样,您的代码适用于印度时区(硬编码) 然后,你的服务器在美国。这里有巨大的时区差异。它的原因,为什么你看不到记录 为了解决您的问题,您不能使用GETDATE(),因为它返回USA datetime。保存表格数据时,请记住India datetime偏移量。在这种情况下,您需要将这两个日期时间概括为可比较的 比方说,您的HARDCODE印度标准时间日期时间偏移量为UTC+5:30(或+330,单位为分钟)。然后你可以用这个来解决你的问题:
select
*
from
[sms]
where
[updtd_date] > convert(date, switchoffset(sysdatetimeoffset(), 330))
and [usecase] = 'manhole_Chennai';
请记住,您在夏季/冬季时间切换方面可能会遇到问题。因此,请尝试修改代码以使用偏移量值保存所有日期(即使用datetimeoffset数据类型而不是datetime)您的问题在于如何使用
InsertSmsDetails()
方法将数据插入数据库,而不是查询数据的方式
您的代码可能会生成以下gem:
insert into sms (updtd_date, usecase, sms)
values ('03/05/2018','manhole_Chennai 11383','Alert : Manhole is filled 6.41666666666667 at time02/05/2018 16:11:09');
您的日期'03/05/2018'
作为字符串插入,由于美国地区的原因,被错误地解释为3月5日
因此,解决这个问题的正确方法是改变数据持久化的方式,以及存储时间戳的方式。有两种选择:
datetimeoffset
数据类型您的问题是如何使用
InsertSmsDetails()
方法将数据插入数据库,而不是查询数据的方式
您的代码可能会生成以下gem:
insert into sms (updtd_date, usecase, sms)
values ('03/05/2018','manhole_Chennai 11383','Alert : Manhole is filled 6.41666666666667 at time02/05/2018 16:11:09');
您的日期'03/05/2018'
作为字符串插入,由于美国地区的原因,被错误地解释为3月5日
因此,解决这个问题的正确方法是改变数据持久化的方式,以及存储时间戳的方式。有两种选择:
datetimeoffset
数据类型执行一个简单的
选择CONVERT(DATE,GETDATE())
并查看它返回的值。这可能是时区差异的问题。欢迎使用stackoverflow。请花一分钟的时间,特别是。样本数据最好作为+。请将您的问题包括在内,包括您当前的尝试和期望的结果。@EzLo its returing-2018-05-03我无法重现该问题,请在我的回答中查看Rexter的链接。您的数据显示3月5日
,您要求的数据比5月3日
的数据更新。可能这就是问题所在?执行一个简单的选择CONVERT(DATE,GETDATE())
并查看它返回的值。这可能是时区差异的问题。欢迎使用stackoverflow。请花一分钟的时间,特别是。样本数据最好作为+。请将您的问题包括在内,包括您当前的尝试和期望的结果。@EzLo its returing-2018-05-03我无法重现该问题,请在我的回答中查看Rexter的链接。您的数据显示3月5日
,您要求的数据比5月3日
的数据更新。可能这就是问题所在?两个查询都不返回任何数据。使用这些查询找到0条记录如果previ