Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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/9/delphi/8.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
C# 在C中创建日期提醒_C#_Sql Server - Fatal编程技术网

C# 在C中创建日期提醒

C# 在C中创建日期提醒,c#,sql-server,C#,Sql Server,我已经创建了一个c应用程序,它需要在表单加载后在datagridview上显示,它将填充过期日期几乎比过期日期早1个月的条目。问题是,我有一个本地数据库,我必须比较当前时间和过期日期。非常感谢! 问题是: SELECT * FROM [Table] WHERE datediff(month,expirationdate,CURRENT_DATE())<1 我有3条处理日期时间的基本规则: 始终存储、传输和检索UTC值。如果您有客户端应用程序,它可以将其转换为从Windows检索的当前

我已经创建了一个c应用程序,它需要在表单加载后在datagridview上显示,它将填充过期日期几乎比过期日期早1个月的条目。问题是,我有一个本地数据库,我必须比较当前时间和过期日期。非常感谢! 问题是:

SELECT  *  FROM [Table] WHERE datediff(month,expirationdate,CURRENT_DATE())<1

我有3条处理日期时间的基本规则:

始终存储、传输和检索UTC值。如果您有客户端应用程序,它可以将其转换为从Windows检索的当前计算机时区。你真的不想。只有使用Web服务器,你才能拥有更多。 避免字符串格式的STR。 如果无法避免字符串中的STR,至少在所有端点选择固定的区域性格式和字符串编码。你不想忘记那些增加了你的问题的人。 如果遵循这些规则,实际处理将变得简单:

DateTime dueTime //set someplace else

if(DateTime.Now.AddMonth(-1) >= dueTime)
  //Due time is in one month or less

CURRENT_DATE是MySql和Oracle数据库系统中的一个函数。在SqlServer中,使用 但仅更改该函数是不够的,因为您的查询中还有其他问题,我认为您应该将其更改为:

SELECT  * FROM [Table] WHERE expirationdate >= GetDate() 
                       AND datediff(month, GetDate(), expirationdate) between 0 and 1
请注意,datediff的第二个参数是startdate,第三个是enddate。如果您的逻辑是查找过期日期小于今天起一个月的所有记录,则expirationdate值用于enddate参数,当前日期用于开始日期。我还假设您不想看到过去的天数,因此我还添加了一个检查,以排除每个低于今天的到期日期

此解决方案是错误的,因为它仍然包含月份部分与1整数不同的日期。但当当前日期为2018年2月13日时,此处将包括2018年3月18日的到期日期,因为3和2之间的差值仍然为1

如果你想更精确,那么你应该在几天而不是几个月内搜索差异

SELECT  * FROM [Table] WHERE expirationdate >= GetDate() 
                       AND datediff(day, GetDate(), expirationdate) <= 30

在这里,我使用一个月30天的标准化值

大家好,欢迎来到SO。你似乎忘记了你的大部分问题。特别是它提供了关于您尝试做什么的详细信息的部分。这一点很重要,以便其他人能够提供帮助。当你写一个问题时,试着想象这个问题是代表其他人提出的。。。如果你读了这个问题,你会知道需要什么吗?这不是一般的指导。它用于回答有关您编写的代码的特定问题,这会给您带来麻烦。你需要一个清晰、明确的例子,说明你所做的工作以及你所犯的错误。通过Google在.Net中快速搜索DateTime对象就是回答这个问题所需的全部。对不起。我现在就修改。啊,看……现在我们有进展了。您已经提供了一个问题,由于细节原因,这个问题现在很明显。当前日期不是sql server中的内置函数。请尝试getdate或current_timestamp。好的,但变量在表中。如何将其作为代码中的变量?您可以将它从DB使用的任何类型转换为Programmign语言使用的任何类型。至少我们对你的期望是这样的。在这种情况下,最好在DB查询本身中解决整个问题。但是,由于你似乎是新来的,选择哪一方比较容易。虽然我基本上同意这一点,但我看不出这是如何回答他们的问题。您的代码是一个dotnet示例,OP在t-sql中执行此操作。@SeanLange:标记是C和sql Server。事实上,如果不是C标签,我永远不会看到这个。什么是STR?它给我一个错误,它不再识别数据库了,我认为这是真正的问题。现在我被你的评论弄糊涂了。什么错误,在哪里?我想这行不行。