(长话短说,我只是一个愚蠢的假设,我确定一个专栏是一个约会时间而不是 - 所以不要指望在这个问题上找到任何有趣的东西,留在这里让dems得到他的正当接受回答)
我写了一个这样的简单查询:
SELECT ID, MIN(DateMadeActive) AS DateMadeActive
FROM RecordStateField WHERE RecordStatusID in (2, 3)
GROUP BY ID
Run Code Online (Sandbox Code Playgroud)
DateMadeActive是datetime列.这回归了我的预期:
ID DateMadeActive
1 20/06/2011 16:15:04
2 20/06/2011 16:14:28
Run Code Online (Sandbox Code Playgroud)
现在我将它插入到一个新表中,但是将MIN(DateMadeActive)的结果插入到另一个表的datetime列中时给了我这个错误:
Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type datetime.
Run Code Online (Sandbox Code Playgroud)
所以为了测试这个我改变我的选择:
SELECT ID, CAST(Min(DateMadeActive) as datetime) AS DateMadeActive
FROM RecordStateField WHERE RecordStatusID in (2, 3)
GROUP BY ID
Run Code Online (Sandbox Code Playgroud)
同样的例外.我可以像这样写它并让它工作:
SELECT ID, CONVERT(datetime, Min(DateMadeActive), 103) AS DateMadeActive
FROM RecordStateField WHERE RecordStatusID in (2, 3)
GROUP BY ID
Run Code Online (Sandbox Code Playgroud)
所以我可以让它工作,但这让我很困惑.MIN(表达式)的文档说返回类型应该与表达式相同,但似乎发生的是MIN(datetime)返回nvarchar(255).我可以通过运行这个来确认:
SELECT ID, Min(DateMadeActive) AS DateMadeActive
INTO TestTable
FROM RecordStateField WHERE RecordStatusID in (2, 3)
GROUP BY ID
Run Code Online (Sandbox Code Playgroud)
我可以看到DateMadeActive列的类型为nvarchar(255).有人对此有所了解吗?只是MSDN中的文档错误?
在我看来,DateMadeActive在[RecordStateField]一个VARCHAR(255)字段中.你可以发表表定义吗?
我问这个是因为MIN()之前已经改变了我的类型.因此,如果结果是VARCHAR(255),则输入似乎也必须是VARCHAR(255)
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |