SQL:如何检查特定的 DateTime

Posted

技术标签:

【中文标题】SQL:如何检查特定的 DateTime【英文标题】:SQL: how to check for a specific DateTime 【发布时间】:2010-07-23 20:55:05 【问题描述】:

我需要从我的代码 (VB.NET) 中检查表中的特定 DateTime 值,但我不知道如何将 DateTime 格式化为字符串。我已经读过 SQL Server 将识别我的字符串,如果它是日期、时间或日期和时间格式。我的意思是:

'May 15, 2004'
'5/15/2004'
'20040515'
'2004 4 am'

SQL Server 会将这些字符串识别为有效的 DateTime 值吗?我很好奇,因为如果我检查表中的实际 DateTime 值,它们的格式如下:

2/2/2006 3:49:33 PM

【问题讨论】:

【参考方案1】:

首先不要将日期/时间值放在 SQL 查询中 - 使用参数化查询,然后您就不需要知道或关心 SQL Server 会将文字解析为什么格式。您将占位符放在 SQL 中,并在参数集合中将值指定为 DateTime

您理所当然地应该使用参数化 SQL,事实上 - 它不仅摆脱了这样的格式化和解析问题,而且可能更重要的是,它是抵御 SQL 注入攻击的最有效的武器。

【讨论】:

我很确定我正在修改的这段代码使用的是参数化 SQL。我想将 DateTime 值硬编码为一个字符串,仅用于我的测试目的。 @400_the_cat 为什么?为什么不直接引入另一个参数?我看不出为此而引入问题的意义。 也许我不明白你的回答。您可以发布或链接到使用参数化查询的示例吗? @400_the_cat:请参阅msdn.microsoft.com/en-us/library/… 了解示例。【参考方案2】:

如果不使用参数化查询,请使用CAST/CONVERT 将字符串显式更改为 DATETIME:

SELECT CAST('2/2/2006 3:49:33 PM' AS DATETIME)

在我的 SQL Server 2005 上,返回给我:

2006-02-02 15:49:33.000

请注意,SQL Server 中的默认日期格式可能与您提供的不同。

【讨论】:

【参考方案3】:

我发现这一直是安全的: YYYY-MM-DD HH:MI:SS

【讨论】:

【参考方案4】:

如果您将 DateTime 与 DateTime 进行比较,您不必担心转换,但是是的,Sql Server(至少从 2k8 开始,我相信 2k5 也是如此)将自动从细绳。也就是说,如果你通过'5/15/2004',它将看到5/15/2004 12:00:00 AM 或类似的东西。

不过,更好的方法是在代码中的 SqlCommand 中使用 SqlParameters。

【讨论】:

以上是关于SQL:如何检查特定的 DateTime的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE SQL - 如何检查时间是不是在特定范围内?

在 Oracle PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素

如何检查sql的第一列或第二列中是不是存在一个特定值?

如何在 OLDEB sql 选择命令中检查字段值是不是为特定字符长度?

最佳实践:如何通过 JDBC 检查 SQL.DATE 中的特定 java.util.Calendar/Date?

如果数据库表格单元格的内容是一个列表,我如何检查该列表是不是包含 T-SQL 中的特定值?