我将数据库设置为
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中
答案 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)