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 PL/SQL 中,如何检查 JSON 对象是不是包含特定键的元素
如何在 OLDEB sql 选择命令中检查字段值是不是为特定字符长度?