使用Cast

时间:2018-10-12 18:24:03

标签: sql ms-access type-conversion

运行Access查询时,出现“无法从字符串转换日期/时间”错误消息,但是我不确定为什么。我以前使用过这种方法,没有遇到任何麻烦。

SET NOCOUNT ON

DECLARE @StartDate date = '[Start date]', @EndDate date = '[End date]'

SELECT

CAST (Date as Date) as LocalDay
,SalesID 
,Status
,Wait
,PO_Number



FROM
cpo_test.dbo.table_agent_detail_view 

WHERE Date BETWEEN @StartDate And @EndDate
AND SOURCEID=1

为什么Cast在这种情况下不起作用?

2 个答案:

答案 0 :(得分:1)

问题不在于CAST,而是

DECLARE @StartDate date = '[Start date]', @EndDate date = '[End date]'

如果我尝试单独执行该语句,则会在SSMS中收到相同的错误。如果我将其更改为

,问题就消失了
DECLARE @StartDate date = '2018-01-01', @EndDate date = '2018-12-31'

尚不清楚您要通过将字符串值'[Start date]'分配给date变量来完成什么工作,但是您将不得不想出另一种方法。

注意:您将其称为“ Access查询”,但不是Access SQL,它是T-SQL(SQL Server),因此我假设您在Access中将它作为传递查询来运行。如果是这样,请注意直通查询的行为与常规Access查询完全不同,因为它们未由Access表达式评估程序或Access数据库引擎处理,因此它们直接传递给ODBC数据源(因此,名称为“ pass-通过查询”)。

答案 1 :(得分:0)

我认为您在查询条件附近缺少日期转换。 尝试 选择

CAST(日期为日期)为LocalDay ,SalesID ,状态 ,等待 ,PO_Number

从 cpo_test.dbo.table_agent_detail_view

@StartDate和@EndDate之间的CAST(日期作为日期) AND SOURCEID = 1