首页 > 解决方案 > 无法获取今天的记录

问题描述

我想检查今天的日期表中是否已经存在任何记录,并且我sql-server在美国。

我尝试了下一个查询,但我得到了 0 条记录,尽管今天日期的表中有 23 条记录。

插入代码

public void InsertSmsDetails()
{
    DateTime today = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"));
    string usecase = "manhole_Chennai";
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["constr"].ConnectionString);
    con.Open();
    SqlCommand cmd = new SqlCommand("insert into sms (updtd_date,usecase,sms) values ('" + today + "','" + usecase + "','"+TempData["SMSBody"].ToString()+"')", con);
    try
    {
        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

桌子

标签: sqlsql-server

解决方案


您的问题是您使用方法将数据插入数据库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 日。

所以解决这个问题的正确方法是改变你保存数据的方式,以及改变你存储时间戳的方式。有几个选项:

  1. 以 UTC 存储时间戳
  2. 使用datetimeoffset将包含时区信息的数据类型。

推荐阅读