0

我能够弄清楚如何使用 SQL 通过 Informix 连接到 Avaya CMS。以下查询有效,但是当我尝试用变量替换“1/01/19”时,出现以下错误:“EIX000: (-1205) Invalid month in date”

有效的代码

select * from Openquery(CMS, 'select * FROM dagent  WHERE ROW_DATE = ''1/01/19'' ');

不起作用的代码

DECLARE @startDate DATETIME
SET @startDate = '2021-01-21'
select * from Openquery(CMS, 'select * FROM dagent WHERE ROW_DATE = ''+@startDate+'' ');

有谁知道问题可能是什么?

4

1 回答 1

0

麻烦的是单引号不够。

你有:

'select * FROM dagent WHERE ROW_DATE = ''+@startDate+'' '
                                       ^^            ^^

在每种情况下,如果您有两个相邻的单引号,您也需要第三个。两个单引号映射到一个单引号,因此带引号的字符串包含+@startDate+,而不是变量的串联。

你需要:

'select * FROM dagent WHERE ROW_DATE = '''+@startDate+''' '

现在三元组中的前两个单引号映射到一个单引号;第三个终止字符串,+@startDate+变成字符串连接,然后下一个单引号开始一个新的字符串,两个单引号映射到一个引号,空格和单引号结束字符串。

如何调试?

  • 将您使用的字符串分配给变量并打印它。

  • 将我建议的字符串分配给一个变量并打印它。

于 2021-01-28T04:20:47.830 回答