运行包含日期作为输入的存储过程时出错。
我的查询是:
$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
答案 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
。以下是您的代码的外观(添加强制性EXEC
和dbo.
前缀):
$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'}