sql-server - 哪些设置提供 SQL Server 默认日期时间格式?

标签 sql-server datetime

比如说,我有一张这样的 table :

表名称“DateTimeFormatCheck”>

enter image description here

我使用下面的查询来插入:

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 也会为日期类型列生成参数化查询。

每当您需要创建字符串文字时,请使用一种不变格式,例如 201409132012-11-07T18:26:20

您可以在Writing International T-SQL Statements阅读更多相关信息。

关于sql-server - 哪些设置提供 SQL Server 默认日期时间格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27011693/

相关文章:

SQL删除不在的地方

php - 一个 MySQL 查询中基于不同日期范围的平均值选择语句

php mysql UTC 时间戳

python - 解析不同格式的时间

sqlite - 什么是SQLite中的datetime-type列?

string - 可以直接比较存储为字符串/文本的日期吗?

sql - View 或临时表 - 在 MS SQL Server 中使用哪个?

sql - 通过将一列中的值引用到另一列来汇总记录

sql-server - 从一列保存多种数据类型为 varchar 的表中进行选择

sql - 创建新表或在现有表中添加列哪个更好