使用CONVERT函数的奇怪错误

时间:2014-10-07 04:00:49

标签: sql sql-server tsql

我将数据库设置为

Account (accountNo, ownerNo, balance)
Owner (ownerNo, firstName, lastName)
Event (id, accountNo, event, amount, eventDate)

所以我试图通过这样做列出7月份帐户1的所有交易(事件表);

CREATE VIEW FourA AS 
   SELECT 
      id, accountNo, event, amount, 
      CONVERT(varchar, eventDate, 103) AS eventDate
   FROM 
      Event
   WHERE 
      accountNo = 1 AND eventDate >= '01/07/2014' AND eventDate < '31/07/2014'

我第一次跑这个,跑得很好。现在我收到了CONVERT函数的错误:

  

Msg 242,Level 16,State 3,Line 1
  将varchar数据类型转换为日期时间数据类型会导致超出范围的值。

无论其!我跑的时候:

select 
    CONVERT(varchar, eventDate, 103) AS eventDate
from 
    Event

它给出了完美的结果:

eventDate
01/01/2014
07/11/2014
08/01/2014 
01/01/2014
07/10/2014
08/02/2014

很明显,没错。但为什么我一直得到这个奇怪的错误?有谁知道吗?

注意:这是在SQL Server中

1 个答案:

答案 0 :(得分:1)

问题不在您的CONVERT功能范围内。问题是因为WHERE子句中的日期文字的隐式转换。我建议您使用YYYYMMDD格式作为日期文字:

CREATE VIEW FourA AS 
SELECT id, accountNo, event, amount, CONVERT(varchar(10), eventDate, 103) AS eventDate
FROM Event
WHERE accountNo = 1 AND eventDate >= '20140701' AND eventDate < '20140731'

如下所述,如果您不希望结果字符串中的时间组件在转换日期时使用VARCHAR(10)