Sql中的日期转换错误

Posted

技术标签:

【中文标题】Sql中的日期转换错误【英文标题】:Date conversion error in Sql 【发布时间】:2012-12-31 10:01:23 【问题描述】:

我得到错误:

从字符串转换日期和/或时间时转换失败。

我这样调用存储过程:

var result = (from x in db.spStoredProc(sStart, sEnd) select x).ToList();

其中sStartsEnd 是具有此值的字符串:

sStart = "CONVERT(date,GETDATE())"

sEnd = "DATEADD(d,1,CONVERT(date,GETDATE()))"

存储过程有两个varchar(max)类型的参数

在存储过程中,我进行左连接并像这样使用它们:

where date_expire >= @sStartSQL AND date_expire < @sEndSQL

为什么我会收到错误消息?

【问题讨论】:

您可能正在混合使用日期格式(例如美国和欧盟),因此当您尝试从字符串转换时它会失败。 @ChrisF 好的,如何解决这个问题? 将所有日期存储为日期(而不是字符串),并确保在与字符串相互转换时正确设置了区域设置。 您使用的是哪个 DBMS? SQL 不是产品 - 它是一种查询语言。 【参考方案1】:

您只能将文字作为参数传递。所以 SQL Server 从字面上尝试将其转换为日期:

sEnd = "DATEADD(d,1,CONVERT(date,GETDATE()))"

相反,通过:

sEnd = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss")

作为参数。

【讨论】:

以上是关于Sql中的日期转换错误的主要内容,如果未能解决你的问题,请参考以下文章

SQL中的日期和时间转换查询

从 C# 中的字符串 SQL 转换日期和/或时间时转换失败

日期转换错误

如何在 spark sql 连接条件中将字符串数据类型转换为日期:to_date 不起作用并且转换抛出错误

SQL - 将 varchar 转换为日期时间

将 C# 日期时间发送到 SQL Server - 错误“从字符串转换日期和/或时间时转换失败”