SQL奇怪的char数据类型转换为日期时间数据类型错误

时间:2011-11-09 13:41:17

标签: sql sql-server-2005

我有这个运行良好的查询:

SELECT 
Value
    FROM data
    WHERE MetaDataID = 'f249819e-817f-4be5-bee9-21aa3d7f72e6'

返回:

27/6/2011 19:12:28
11/7/2011 19:18:54
10/7/2011 11:49:35
3/7/2011 17:41:53

如果我将查询改为:

SELECT 
VALUE,
MONTH(Value)
    FROM data  
    WHERE MetaDataID = 'f249819e-817f-4be5-bee9-21aa3d7f72e6'

我收到错误:将char数据类型转换为datetime数据类型会导致日期时间值超出范围。

可能有帮助的信息:

1)Value Column是VARCHAR类型。

2)当我指定MetaDataId时,我确保结果为“date”。为了确保,我也使用了WHERE IsDate(Value)= 1并且我在select上使用了ISDATe(Value)来查看每个结果是否都是日期而且它是......

我不知道为什么会这样?任何人都有线索?

1 个答案:

答案 0 :(得分:3)

您必须执行显式转换为datetime数据类型。

SELECT 
VALUE,
MONTH(Convert(DateTime, Value,103)) as [Month]
    FROM data  
    WHERE MetaDataID = 'f249819e-817f-4be5-bee9-21aa3d7f72e6'