Sql 从代表天、月和年的三个数字中创建日期的标准方法是什么?

Sql 从代表天、月和年的三个数字中创建日期的标准方法是什么?,sql,sql-server,date,Sql,Sql Server,Date,我有2009年,11个月和12天。所有这些都作为整数传递给我。我想做的是根据这些创建一个日期。我想把它们作为where语句的一部分 从干净的代码和最重要的速度角度来看,最好的方法是什么 我个人使用的是MS SQL,我相信这会有所不同 提前感谢, Alex.您是在谈论将它们组合存储在数据库中,还是以这种方式存储它们并希望在查询中组合它们并转换为dte以使用日期数学函数?您是在谈论将它们组合存储在数据库中,还是以这种方式存储它们并希望在查询中组合它们并转换为dte要使用日期数学函数?最明确的格式(仅

我有2009年,11个月和12天。所有这些都作为整数传递给我。我想做的是根据这些创建一个日期。我想把它们作为where语句的一部分

从干净的代码和最重要的速度角度来看,最好的方法是什么

我个人使用的是MS SQL,我相信这会有所不同

提前感谢,


Alex.

您是在谈论将它们组合存储在数据库中,还是以这种方式存储它们并希望在查询中组合它们并转换为dte以使用日期数学函数?

您是在谈论将它们组合存储在数据库中,还是以这种方式存储它们并希望在查询中组合它们并转换为dte要使用日期数学函数?

最明确的格式(仅使用整数)是YYYYMMDD、YYYY-MM-DD和YYYY/MM/DD。我不能具体地与MSSQL交谈,但根据我的经验,YYYY-MM-DD是最普遍支持的格式,因为它在很大程度上是数据的一部分。

最明确的格式(仅使用整数)是YYYYYYMMDD,YYYY-MM-DD和YYYY/MM/DD。我不能具体地与MSSQL交谈,但根据我的经验,YYYY-MM-DD是最普遍支持的,因为它是的一部分。

假设您的INT被称为@d、@m和@y:

编辑

请注意,这种技术在任何方面都不是规范的,它依赖于操纵SQL Server的DATETIME实现

如果为@d、@m或@y传递无效值,则返回的日期时间无效:

{@y=2009,@m=11,@d=12}返回2009-11-12正确 {@y=2009,@m=11,@d=50}返回2009-12-19错误 {@y=2009,@m=13,@d=12}返回2010-01-12错误 假设您的整数名为@d、@m和@y:

编辑

请注意,这种技术在任何方面都不是规范的,它依赖于操纵SQL Server的DATETIME实现

如果为@d、@m或@y传递无效值,则返回的日期时间无效:

{@y=2009,@m=11,@d=12}返回2009-11-12正确 {@y=2009,@m=11,@d=50}返回2009-12-19错误 {@y=2009,@m=13,@d=12}返回2010-01-12错误
正如Ben yyyy-mm-dd所提到的,ANSI标准是一个相当安全的赌注,因为它不像dd-mm-yyyy或mm-dd-yyyy那样模棱两可。SQL Server很乐意将以该格式传递的varchar转换为日期。

正如Ben yyyy-mm-dd所述,ANSI标准是一个非常安全的选择,因为它不像dd-mm-yyyy或mm-dd-yyyy那样模棱两可。SQL Server很乐意将以该格式传递的varchar转换为日期。

后者更常见,因为它是ISO标准ISO 8601。该答案没有回答问题,因为它没有说明将整数转换为日期格式时应该做什么。您没有说明传递整数的语言。根据公认的答案,我认为您正在使用存储过程,但我当时不知道这一点:-对不起,本,我无意显得粗鲁。你完全正确。我没有明确表达我的问题。我想补充一个问题,把这些作为我where声明的一部分。感谢您的帮助:后者更常见,因为它是ISO标准ISO 8601。此答案没有回答问题,因为它没有说明您应该如何将整数转换为日期格式。您没有说明传递整数的语言。根据公认的答案,我认为您正在使用存储过程,但我当时不知道这一点:-对不起,本,我无意显得粗鲁。你完全正确。我没有明确表达我的问题。我想补充一个问题,把这些作为我where声明的一部分。感谢您的帮助:我想将它们用作where语句的一部分。我想将它们用作where语句的一部分。只有当不同字段中的日期组合在一起时才有效。这就是为什么以这种方式存储日期信息是个坏主意。只有当不同字段中的日期组合在一起时才是实际有效的日期时,这种方法才有效。这就是为什么用这种方式存储日期信息是个坏主意。
DATEADD(month, ((@y - 1900) * 12) + @m - 1, @d - 1)