我错过了不使用新的DateTime2数据类型的理由吗?
例如,迁移到另一个数据库系统或将其与其他技术集成时是否会导致问题?
我意识到这可能是一个骗局,但我花了几个小时寻找答案,似乎无法找到答案.
我目前正在创建一个检索Concert数据的Web API.
我有一个SQL Server表,它包含一个开始和结束日期,两者都作为一种datetime2类型.我已经以这种格式插入了日期,它们在查看数据库时不会出现任何问题:
2015-10-08T20:00:00.0000000+01:00
Run Code Online (Sandbox Code Playgroud)
我的模特:
public class Concert
{
public int Id { get; set; }
public string Name { get; set; }
public int LocationId { get; set; }
[Column(TypeName = "DateTime2")]
public DateTime Start { get; set; }
[Column(TypeName = "DateTime2")]
public DateTime End { get; set; }
public string Description { get; set; }
public string Url { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的类中的方法会调出我的数据库数据:
public List<Concert> getAll()
{
List<Concert> concerts = new List<Concert>();
SqlConnection …Run Code Online (Sandbox Code Playgroud) 我有2个表,datetime2每个表都有一个字段.其中一个表也存储了纳秒,而另一个表只存储了几毫秒(没有办法改变这些数据).现在我想比较2个表并检查datetime2值是否匹配,但我必须忽略这个纳秒.
样本数据:
Table1 Table2
2018-01-24 10:51:23.9976180 2018-01-24 10:51:23.9970000
2018-01-24 10:51:23.9976180 2018-01-24 10:51:23.9970000
2018-01-24 11:08:23.2578500 2018-01-24 11:08:23.2570000
Run Code Online (Sandbox Code Playgroud)
我的查询目前看起来像这样:
select t1.* from Table1 t1, Table12 t2 where t1.tradeDateTime = t2.tradeDate
Run Code Online (Sandbox Code Playgroud)
你可以猜到,我没有得到这些例子的任何结果,因为纳秒不同.
所以我的问题是,如何忽略where-clause中的纳秒?
编辑:
我知道我应该使用正确的JOINs.这个查询只是为了测试我在查询中是否犯了错误JOIN
我有一个充满datetime2列的数据库,而不是需要移动到SQL 2005数据库的数据库.所以,我需要将所有这些datetime2(7)列转换为datetime.
我该怎么做呢?
现在我已经设法为datetime2数据类型的所有列选择表名和列名,如下所示:
SELECT t.name, c.name, i.DATA_TYPE
FROM sys.tables AS t
JOIN sys.columns c ON t.object_id = c.object_id
JOIN information_schema.columns i ON i.TABLE_NAME = t.name AND i.COLUMN_NAME = c.name
WHERE i.data_type = 'datetime2'
Run Code Online (Sandbox Code Playgroud)
我只是不知道如何做其余的事情.
我对DateTime2SQL Server 2008中的存储过程和数据类型有一个小问题.
我使用DateTime2数据类型获得了几个存储过程,我想插入日期,0001.01.01 00:00:00但这不适用于VB.net,我找不到原因.
我用这个代码片段:
Dim sqlStatement As New SqlClient.SqlCommand
Dim sqlTransaction As SqlClient.SqlTransaction
sqlStatement.CommandType = CommandType.StoredProcedure
sqlStatement.CommandText = "SCHEMA.spInsertDate"
sqlStatement.Parameters.AddWithValue("@Date", "0001.01.01 00:00:00")
sqlStatement.ExecuteNonQuery()
Run Code Online (Sandbox Code Playgroud)
从我的程序调用存储过程(存储过程是一个简单的INSERT声明没有别的,并与实际日期工作正常).但是当我输入日期时0001.01.01 00:00:00,总是会出现错误,当我想执行存储过程时,我无法在'01 .01.1753'之前插入日期.
现在我已经知道DateTime2SQL Server 中的数据类型应该支持这一点.
所以我的问题是这可能是一个驱动程序问题,更新SQLClient会解决这个问题,或者这是一个普遍的问题,我终于可以停止搜索并只使用1753.01.01.
谢谢Lim
我需要在 Microsoft Sql Server 的 QUEUE 表中插入一个日期字符串作为 DATETIME2。
数据库结构:
CREATE TABLE "QUEUE" (
ID INT PRIMARY KEY NOT NULL,
TEAMID VARCHAR(550) ,
STATUS VARCHAR(50) ,
MSG VARCHAR(50) ,
TIME DATETIME2,
ERROR VARCHAR(10) ,
);
INSERT INTO QUEUE VALUES(2,'c33','ok','FoundID',CONVERT('Tue Sep 09 12:18:52 2014' AS DateTime2),'OK');
Run Code Online (Sandbox Code Playgroud)
值 'Tue Sep 09 12:18:52 2014' 应转换为 datetime2 格式,如 2014-09-09 12:18:52.000000 并应插入。
我试过 CAST 和 COVERT 但它失败了。
我已经阅读了几篇有关在SQL Server中使用支持日期的数据类型的文章,但是我仍然不确定要使用哪种数据。
所有人都说使用新的强大datetime2类型,但是smalldatetime在内存方面(6字节对4字节)仍然更加方便
这是我的范围:
以这种方式定义的表:
Date: typeof(<Date type to choose>)
Value1: typeof(int)
Value2: typeof(int)
Value3: typeof(int)
Run Code Online (Sandbox Code Playgroud)
然后我有这些要求:
对于Date列,我需要精确到分钟。
在这个表中,我每天将存储多达一百万条如此大的大数据。
我的问题是:我是否必须使用smalldatetype每天为我节省2 mb 的旧机?
要么
我应该使用新的功能强大的datetime2数据类型吗?
谢谢
我有一列 varchar(50) 格式的日期,写为“dd/mm/yyyy”,我需要将其转换为 datetime2 格式,但是当它运行时,它假定格式为“mm/dd/yyyy”并相应地进行转换,当日期字段超过 12 时抛出错误。如何让它以正确的方式提取数据?
例如
03/04/2017 00:00:00
03/04/2017 00:00:00
15/06/2017 00:00:00
15/06/2017 00:00:00
17/05/2017 00:00:00
Run Code Online (Sandbox Code Playgroud)
最后 3 次投掷失误。
当前命令:
select case when try_convert(datetime2,[Date]) is not null
then cast([Date]as datetime2)
else null
end, [Date]
from [Source1]
Run Code Online (Sandbox Code Playgroud)
结果:
2017-03-04 00:00:00.0000000 03/04/2017 00:00:00
2017-03-04 00:00:00.0000000 03/04/2017 00:00:00
NULL 15/06/2017 00:00:00
NULL 15/06/2017 00:00:00
NULL 17/05/2017 00:00:00
Run Code Online (Sandbox Code Playgroud) 我似乎无法在官方文档中找到SQL Server 2005是否支持datetime2数据类型?
datetime2 的默认值是多少?
编辑:抱歉,也许我解释错了,我尝试插入 getDate() 并且它保存了我这个值。
我需要知道我的 ssms 的该字段(红色字段)的值是多少
