【问题标题】:Converting Date/Time from String Error When Using Cast使用 Cast 时从字符串错误转换日期/时间
【发布时间】:2018-10-12 18:24:02
【问题描述】:

我在运行 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 在这种情况下不起作用?

【问题讨论】:

  • 我不使用 Access,但是 SQL 有一个 IsDate() 函数。数据库中的一个(或多个)值不包含有效的日期字符串。尝试简单地做一个 SELECT * FROM WHERE isDate(Date) =0

标签: sql ms-access type-conversion


【解决方案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-通过查询”)。

【讨论】:

    【解决方案2】:

    我认为您在查询的 where 条件附近缺少 Date 中的演员表。 尝试 选择

    CAST(日期为日期)为 LocalDay ,销售编号 ,地位 ,等待 ,PO_Number

    来自 cpo_test.dbo.table_agent_detail_view

    在@StartDate 和@EndDate 之间进行转换(日期为日期) AND SOURCEID=1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-06
      • 1970-01-01
      • 2011-08-15
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      • 1970-01-01
      相关资源
      最近更新 更多