比如说,我有一张这样的 table :
表名称“DateTimeFormatCheck”>
我使用下面的查询来插入:
Insert into [dbo].[DateTimeFormatCheck] ([DateTimeCheck]) values('11/19/2014 1:29 PM')
它插入的日期如 2014-11-19 13:29:00.000 ,但我的插入格式(M/d/yyyy h:m tt) 不同作为插入日期。
现在我想知道SQL Server如何检测我提供的字符串日期格式?和为什么插入后它总是提供这种格式 yyyy-MM-dd HH:mm:ss ?
谢谢
最佳答案
别这样做!不要使用字符串代替日期,也不要使用特定于文化的日期或日期时间格式,这会导致灾难。
SQL Server 没有“日期格式”,只是用于将日期与字符串相互转换的格式。其中之一是默认值,由服务器的排序规则控制。您既不能假设也不应该依赖特定的排序规则,因此您应该尽可能避免转换。此外,传递字符串值可以防止 SQL Server 在日期列上使用索引,因为它必须将字符串转换为基础列类型。
将日期作为日期类型变量或参数传递要容易得多且安全得多。通过这种方式,您可以避免整个转换困惑,并避免 SQL 注入(inject)攻击。
没有理由将字符串而不是日期传递到服务器。所有 SQL Server 客户端(包括 ADO.NET)都允许您执行参数化查询。 NHibernate 和 Entity Framework 等 ORM 也会为日期类型列生成参数化查询。
每当您需要创建字符串文字时,请使用一种不变格式,例如 20140913
或 2012-11-07T18:26:20
您可以在Writing International T-SQL Statements阅读更多相关信息。
关于sql-server - 哪些设置提供 SQL Server 默认日期时间格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011693/