SQL保存数据时间

本文关键字:时间 数据 保存 SQL | 更新日期: 2023-09-27 18:28:11

我有一个Date类型的表。我想插入以下格式的日期:dd-mm-yyyy(例如:2014年10月27日)。我已经尝试过使用String,但问题是当我想用2个日期进行搜索时,SQL只会比较日期。我真的需要一天、一个月、一年。在C#中,我使用DateTime.Now.ToShortDateString();检索日期并插入数据库。

我用这个查询来搜索日期:

查询:

SELECT * 
FROM [TABLE]
WHERE ([COLUMN] >= '25/10/2014' AND [COLUMN] <= '26/10/2014');

有什么方法可以像我想要的格式一样保存数据吗?然后将更容易选择我想要的数据。

对不起我的英语,请帮忙谢谢。

SQL保存数据时间

SQL Server不以任何字符串格式存储DateTime,而是以8字节的数值形式存储。

各种设置(语言、日期格式)只会影响DateTime在SQLServerManagementStudio中显示的方式,或者在尝试将字符串转换为DateTime时对其进行解析的方式。

SQL Server支持多种格式-请参阅MSDN联机丛书中的CAST和CONVERT。这些格式中的大多数都依赖于您的设置,因此,这些设置有时可能有效,有时则无效。

解决此问题的方法是使用SQL Server支持的ISO-8601日期格式(稍作调整)-无论您的SQL Server语言和日期格式设置如何,此格式始终有效。

SQL Server支持ISO-8601格式,有两种风格:

  • YYYYMMDD仅用于日期(没有时间部分);注意:没有破折号,这很重要!YYYY-MM-DD不独立于SQL Server中的日期格式设置,并且在任何情况下都不会工作

或:

  • YYYY-MM-DDTHH:MM:SS表示日期和时间-请注意:此格式短划线(但它们可以省略),并且固定的T作为DATETIME的日期和时间部分之间的分隔符

这对SQL Server 2000及更新版本有效。

如果您使用SQL Server 2008或更新版本和DATE数据类型(只有DATE-而不是DATETIME!),那么您实际上也可以使用YYYY-MM-DD格式,这也适用于SQL Server中的任何设置。

不要问我为什么整个主题如此棘手和令人困惑-事实就是这样。但是使用YYYYMMDD格式,您应该可以适用于任何版本的SQL Server以及SQL Server中的任何语言和日期格式设置。

对于SQL Server 2008及更新版本,如果只需要日期部分,建议使用DATE;如果同时需要日期和时间,则建议使用DATETIME2(n)。如果可能的话,您应该尝试开始逐步淘汰DATETIME数据类型

因此,在您的具体案例中,我会将该查询重写为:

SELECT * 
FROM [TABLE]
WHERE ([COLUMN] >= '20141025' AND [COLUMN] <= '20141026');

独立于SQL Server中的任何语言、区域或日期格式设置。。。。

永远不要将日期和日期时间值保存为字符串。并始终参数化您的SQL。如果你想让自己轻松一点,可以使用像Dapper这样的微ORM来简化这样的操作:

var result = connection.Query(
    "SELECT * FROM EXAMPLE where data between @lower and @upper", 
    new { lower = DateTime.Parse("10/25/14"), upper = DateTime.Parse("10/26/14") });

我还建议您使用具体的数据类型从数据库返回信息,这样您就不会被迫使用动态属性。

是的,例如在MS SQL中,您可以将数据保存在datetime2(或等效格式)中,并在输出时对其进行格式化。这种方法将允许您比较日期。

您可以采取的步骤:

  1. 将手头列的数据类型从字符串更改为数据时间

  2. 您可以在检索时对日期应用格式。例如,来自欧洲的用户将具有与北美用户不同的日期结构。