【问题标题】:Error while converting nvarchar to datetime将 nvarchar 转换为日期时间时出错
【发布时间】:2012-08-26 16:40:32
【问题描述】:

我想从我的 java 程序中执行我的 MSSQL 存储过程,方法是提供两个日期作为参数,以便在这两个日期之间进行选择。所以在java代码中我是这样进行的:

"EXEC [dbo].[MyProcedure] " + "'"+ dateFrom+"'" ,"'"+dateTo"'"

我已经像这样在 sql server 过程中声明了我的参数:@collected_date1 datetime, @collected_date2 datetime。 我选择了这样的两个日期:

SELECT @date1 = Convert(varchar(23),@collected_date1,121)
SELECT @date2= Convert(varchar(23),@collected_date2, 121)  

但是我收到此消息错误:Error converting data type nvarchar to datetime

你能帮帮我吗? 谢谢

【问题讨论】:

  • 在 EXEC 语句中,dateFrom 和 dateTo 的值是什么样的?我假设它们是代表日期的字符串,但这些日期是什么格式?也许引擎无法使用当前的区域设置和/或日期格式来转换它们。

标签: java sql-server stored-procedures


【解决方案1】:

在上面的声明中你声明了变量

@collected_date1 日期时间, @collected_date2 日期时间

当你设置你将数据类型转换为 varchar 所以它给你错误

如果你想设置成日期时间数据类型,你应该使用

SELECT @date2= Convert(datetime,@collected_date2, 121)  ;

【讨论】:

  • 谢谢,您的回答现在可以了,但我遇到了另一个问题:“从字符串转换日期和/或时间时转换失败”。我给我的日期参数这个格式“yyyy-mm-dd”。请有任何想法来纠正这个问题。非常感谢
  • Convert(DATETIME, CONVERT(VARCHAR(2), @Month) + '/' + CONVERT(VARCHAR(2), @Day) + '/' + CONVERT(VARCHAR(4), @Year))
  • 这是另一个SELECT convert(datetime, @collected_date2+ '00:00:00', 120) -- yyyy-mm-dd hh:mm:ss(24h)
  • @collected_date1 和 @collected_date2 已经声明为 datetime 值,为什么 OP 想再次将它们转换为 datetime ?所以varchar(23) 非常有意义,并且问题可能发生在解析参数时,即在实际执行存储过程之前。
猜你喜欢
  • 1970-01-01
  • 2015-09-23
  • 2021-01-17
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-11
  • 1970-01-01
相关资源
最近更新 更多