Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 今天无法获取';s记录_Sql_Sql Server - Fatal编程技术网

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日

因此,解决这个问题的正确方法是改变数据持久化的方式,以及存储时间戳的方式。有两种选择:

  • 以UTC格式存储时间戳
  • 使用将包含时区信息的
    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日

    因此,解决这个问题的正确方法是改变数据持久化的方式,以及存储时间戳的方式。有两种选择:

  • 以UTC格式存储时间戳
  • 使用将包含时区信息的
    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