0

运行包含日期作为输入的存储过程时出现错误。

我的查询是:

$query = "asistencia_virtual '2012-01-01', '2012-12-31'";

在 Management Studio 中,它运行良好。

我只有过时的查询有问题,其他的都很好。

警告:odbc_exec():SQL 错误:[Microsoft][SQL Server Native Client 10.0][SQL Server]
Error de sintaxis al convertir una cadena de caracteres a datetime., SQL 状态 22008 in SQLExecDirect

4

3 回答 3

2

正如您所发现的,yyyy-mm-dd这不是一种安全的日期格式。原因如下:

SET LANGUAGE FRENCH;
SELECT MONTH(CONVERT(DATETIME, '2012-01-12')); -- yields 12, not 1
GO
SELECT CONVERT(DATETIME, '2012-12-31');

第一个查询产生12而不是1,因为它将它解释为yyyy-dd-mm。第二个查询产生:

Msg 242, Level 16, State 3, Line 1
La conversion d'un type de données varchar en type de données datetime a créé une valeur hors limites。

仅限日期的日期时间字符串文字的唯一安全格式是yyyymmdd. 这是您的代码的外观(添加强制性EXECdbo.前缀):

$query = "EXEC dbo.asistencia_virtual '20120101', '20121231';";

有关常见日期/时间查询问题的更多信息:

于 2013-01-24T02:13:02.253 回答
0

当谈到日期时,最好的做法是给月份提供书面替代 - 这样就不会在此过程中混淆日期和月份。尝试以以下格式将日期输入为字符串:

'dd MMM yyyy'

$query = "asistencia_virtual '01 Jan 2012', '31 Dec 2012'";
于 2013-01-24T00:56:08.323 回答
0

试试这个(参考)

asistencia_virtual {d'2012-01-01'}, {d'2012-12-31'}
于 2013-01-24T00:59:41.577 回答