Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server sql server:“使用从字符串转换日期和/或时间时,转换失败”_Sql Server_Stored Procedures - Fatal编程技术网

Sql server sql server:“使用从字符串转换日期和/或时间时,转换失败”

Sql server sql server:“使用从字符串转换日期和/或时间时,转换失败”,sql-server,stored-procedures,Sql Server,Stored Procedures,我从以前的开发人员那里得到了一个代码,其中保存数据库的日期如下 'Jan 1 2018 12:01PM' 现在有一个用于报告输出的存储过程,可以获取日期范围 数据类型为 @datefrom varchar(50), @dateto varchar(50) 声明是这样的 where (CAST(ai.date_created as DATETIME2) between @datefrom and @dateto) AND ai.sex = (CASE WHEN @sex = 'ALL' T

我从以前的开发人员那里得到了一个代码,其中保存数据库的日期如下

'Jan 1 2018 12:01PM'
现在有一个用于报告输出的存储过程,可以获取日期范围

数据类型为

@datefrom varchar(50),
@dateto varchar(50)
声明是这样的

 where 
(CAST(ai.date_created as DATETIME2) between @datefrom and @dateto) AND
ai.sex = (CASE WHEN @sex = 'ALL' THEN ai.sex ELSE @sex END) AND
ai.special_health_condition = (CASE WHEN @special = 'ALL' THEN ai.special_health_condition ELSE @special END)
END
执行代码时,会显示此错误

Conversion failed when converting date and/or time from character string
我试图更改基于答案创建的ai.date_的格式,但似乎没有任何效果。这里怎么了?对不起,我是一个刚毕业的学生,这对我来说就像一个谜。提前谢谢

更新

代码如下所示:

    @datefrom date,
    @dateto date,
    @sex varchar(50),
    @special varchar(50)
AS
BEGIN
        select 
    ai.application_no,
    ai.franchise_no,
    ai.operator_name,
    ai.full_address,
    m.motor_no,
    ai.date_created
,ai.frist_name,
ai.middle_name,
ai.surname,
ai.citizenship,
ai.primary_occupation,
ai.contact_no,
ai.email_add,
ai.street,
ai.subdivision,ai.barangay,
ai.city,
ai.sex,
ai.civil_status,
ai.type,
ai.type_of_ownership,
m.chassis_no,
m.year_model,
m.plate_no,
b.brand_name,
ai.tax_certification_issued_on,
ai.tax_certification_no,
m.toda_id
,ai.age,
 ai.special_health_condition

from vfTA_tblApplicationInfo as ai inner join 
vfTA_tblMotor as m on m.motor_id = ai.motor_id inner join
vfTA_tblBrand as b on b.brand_id = m.brand_id 

where 
(CAST(ai.date_created as DATETIME2) between @datefrom and @dateto) AND
ai.sex = (CASE WHEN @sex = 'ALL' THEN ai.sex ELSE @sex END) AND
ai.special_health_condition = (CASE WHEN @special = 'ALL' THEN ai.special_health_condition ELSE @special END)
END
其中的数据是datefrom='2018年1月1日12:00AM',dateto='2018年1月31日11:59PM',sex='All',special='All'


这是以前的开发人员留下的代码。提前谢谢。

我已经解决了这个问题

首先,我改变了这一点:

@datefrom date,
@dateto date
为此:

@datefrom varchar(50),
@dateto varchar(50)

我还改变了演员阵容,尝试了_CAST。“1”附近的“语法不正确”错误是由于数据类型date引起的,该日期应为varchar50。谢谢你的帮助。

我已经解决了这个问题

首先,我改变了这一点:

@datefrom date,
@dateto date
为此:

@datefrom varchar(50),
@dateto varchar(50)

我还改变了演员阵容,尝试了_CAST。“1”附近的“语法不正确”错误是由于数据类型date引起的,该日期应为varchar50。感谢您的帮助。

我们需要一些示例数据和生成错误的SQL。如果没有这些,我们真正能告诉你的是,在某个地方,你有一个字符串,你正试图转换成一个日期,它不是一个有效的格式。您不应该将数据类型存储在不代表它们的类型中。日期应存储为日期,整数应存储为整数,小数应存储为。。。你明白了。否则你只会遇到问题。如果您使用的是SQL Server 2012或更高版本,或者可以查看TRY_CAST和TRY_CONVERT;但我的建议是,一旦发现问题,就修复数据类型。ai.date\u是否创建了varchar列?如果是,为什么?为什么要将日期存储为字符串?如果该列是varchar,则它很可能包含无法转换为日期的值。将日期存储为VARCHARM不是最佳做法。我还惊讶地看到以前的开发人员将日期存储为varchar。我已尝试将它们转换为日期,但错误仍然存在。请使用“选择创建的日期”,尝试从vfTA\u tblApplicationInfo中选择创建为日期的日期,以查找无法正确转换的日期数据。然后去修复它们,并使用正确的数据类型。我们需要一些示例数据和生成错误的SQL。如果没有这些,我们真正能告诉你的是,在某个地方,你有一个字符串,你正试图转换成一个日期,它不是一个有效的格式。您不应该将数据类型存储在不代表它们的类型中。日期应存储为日期,整数应存储为整数,小数应存储为。。。你明白了。否则你只会遇到问题。如果您使用的是SQL Server 2012或更高版本,或者可以查看TRY_CAST和TRY_CONVERT;但我的建议是,一旦发现问题,就修复数据类型。ai.date\u是否创建了varchar列?如果是,为什么?为什么要将日期存储为字符串?如果该列是varchar,则它很可能包含无法转换为日期的值。将日期存储为VARCHARM不是最佳做法。我还惊讶地看到以前的开发人员将日期存储为varchar。我已尝试将它们转换为日期,但错误仍然存在。请使用“选择创建的日期”,尝试从vfTA\u tblApplicationInfo中选择创建为日期的日期,以查找无法正确转换的日期数据。然后去修复它们并使用正确的数据类型我很高兴你解决了你的问题,但你只是在延长问题,如果你不修复数据类型,很可能会得到错误的答案。@Nick.McDermaid我们现在正在创建一个新的数据库模型,这样我们就再也不会遇到同样的问题了。我们发现了更多的问题。谢谢您的帮助,先生。我很高兴您解决了问题,但您只是在延长问题的时间,如果您不修复数据类型,很可能会得到错误的答案。@Nick.McDermaid我们现在正在创建一个新的数据库模型,这样我们就再也不会遇到同样的问题了。我们发现了更多的问题。谢谢你的帮助,先生。