odbc_exec datetime错误

时间:2013-01-24 00:51:03

标签: php sql sql-server-2008 odbc

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

我的查询是:

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

在Management Studio中,它非常完美。

我只查询过时的查询,其他查询效果很好。

  

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

3 个答案:

答案 0 :(得分: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 typededonnéesvarcharen typededonnéesdatetimeacrééunevaleur hors limites。

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

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

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

答案 1 :(得分:0)

说到日期,最佳做法是给出月份的书面替代方案 - 这样就不可能在这个过程中日和月分散。尝试按以下格式输入日期作为字符串:

'dd MMM yyyy'

$query = "asistencia_virtual '01 Jan 2012', '31 Dec 2012'";

答案 2 :(得分:0)

试试这个(reference)

asistencia_virtual {d'2012-01-01'}, {d'2012-12-31'}