当前位置: 首页 > 面试题库 >

SQL不允许将日期列强制转换为datetime吗?

徐凌
2023-03-14
问题内容
Select * 
from tableA 
inner join tableB on tableA.id = tableB.aid 
                  and cast(a.date AS DATETIME) = CAST('2015-08-24' AS DATETIME)

存储在tableA.date其中的值为“ 2015-08-24”,表示数据没有问题。

当我执行上面的语句时,我得到

将日期数据类型转换为日期时间数据类型导致超出范围的值

我可以知道为什么不能向它投date专栏datetime吗?


问题答案:

问题的 根本原因 是:

  • 数据类型DATE具有从01-01-0001到的一系列可接受的值12-31-9999
  • 数据类型DATETIME具有从01-01-1753到的一系列可接受的值12-31-9999

因此,如果您碰巧有一个DATE1753之前的值或一个空/ NULL值-这将超出DATETIME可以处理的范围。

您应该 停止 DATETIME在SQL Server 2008
及更高版本中使用。使用DATETIME2(n)代替(其中n代表所需的小数秒数)。

因此,请尝试以下操作:

select * 
from tableA 
inner join tableB on tableA.id = tableB.aid 
                  and cast(a.date AS DATETIME2(3)) = CAST('2015-08-24' AS DATETIME2(3))

而且我敢肯定这会很好。



 类似资料:
  • 问题内容: 在SQL Server 2005中,为什么这样做: 展示: 1900年1月1日上午12:00 我会以为应该的吗? 问题答案: 空字符串将强制转换为,之后将强制转换为时代日期。 与不同,区分和一个空字符串。

  • 问题内容: 我想知道为什么Java不允许将布尔值转换为整数,如下所示: 例如,这可以用一行代码来完成, 但似乎更好和更容易阅读的方法是允许类型转换,如和一样。Java为什么不包括此功能? 问题答案: 不允许这样做是因为Java设计人员(正确地)认识到C和C ++中的布尔/整数重载是错误的重要来源。 (我记得曾经写过一些设计原理的书,但我找不到。) 例如: 是合法的,但可能是用C或C ++编写的应用

  • 问题内容: 我正在尝试将日期格式(例如2012-04-20 05:54:59)转换为mm- yyyy。我遇到了一些解决方案,说您需要转换为varchar。有什么方法可以使用Convert函数吗? 谢谢 :) 问题答案: 您可以使用从SQL Server 2012起可用的函数: 输出:

  • 问题内容: 我正在尝试将日期从格式转换为SQL Server中的格式。 我正在使用以下命令 我尝试在msdn上查找受支持的样式,但没有找到完全匹配的样式。 帮助将不胜感激。 问题答案:

  • 问题内容: 我在以字符串格式导入的pandas DataFrame中有一个字段。它应该是日期时间变量。如何将其转换为datetime列,然后根据日期进行过滤。 例: DataFrame Name: raw_data Column Name: Mycol Value Format in Column: ‘05SEP2014:00:00:00.000’ 问题答案: 使用该函数,指定一种格式以匹配您的数

  • 问题内容: 我有一个日期列(称为“时间”),其中包含天/小时/分钟等(timedelta)。我在数据框中创建了一个新列,我想将“时间”列转换为秒,并将其放入每一行的新列中。 有人有指针吗?我在互联网上能找到的就是如何转换您的列,而不是创建一个新列并转换另一个列。 先感谢您! 问题答案: 我认为您需要: 样品: 如果需要转换为: