0

入力として日付を含むストアドプロシージャを実行するとエラーが発生します。

私の質問は:

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

Management Studioでは、完璧に機能します。

私は日付の付いたクエリにのみ問題があり、他のクエリはうまく機能します。

警告:odbc_exec():SQLエラー:[Microsoft] [SQL Server Native Client 10.0][SQLServer]
エラーdesintaxisal convertir una cadena de caracteres a datetime。、SQL state 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代わりに が生成されます。2 番目のクエリの結果は次のとおりです。1yyyy-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. コードは次のようになります (obligatoryEXECdbo.prefix を追加)。

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

一般的な日付/時刻クエリの問題に関する詳細については、次を参照してください。

于 2013-01-24T02:13:02.253 に答える
0

これを試してください(参照)

asistencia_virtual {d'2012-01-01'}, {d'2012-12-31'}
于 2013-01-24T00:59:41.577 に答える
0

日付に関しては、ベスト プラクティスは、月の代わりに書面を使用することです。そうすれば、途中で日と月が混同される可能性がなくなります。次の形式の文字列として日付を入力してみてください。

「dd MMM yyyy」

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