0

我正在尝试对数据库进行查询以使用 php 返回报告。我正在使用重复的页面,因为它们都从同一个数据库/表中提取。

我收到的具体错误是:

消息 241,级别 16,状态 1,第 1 行从字符串转换日期时间的语法错误。

此查询有效并返回所需的数据:

删除了每个公司政策的选择声明

但是,此查询不起作用:

删除了每个公司政策的选择声明

我在演员部分将 DateUpdated 更改为 DateAdded。日期/时间是从 Java 日期选择器脚本中获得的。这两页上的所有内容都是准确的,除了 sql 查询。有谁知道可能是什么问题?我对 PHP 还很陌生,所以我边走边学。

我试过搜索,但我不明白我应该做什么。

我从选择器那里声明了这些....

$startunix     = date("Y-m-d H:i:s", strtotime($startdate));
$startunixmn   = date("Y-m-d 23:59:59", strtotime($startdate));
$endunix       = date("Y-m-d H:i:s", strtotime($enddate));
$endunixmn     = date("Y-m-d 23:59:59", strtotime($enddate));

在 sql 查询中,代替语句中显示的日期/时间,它们有两个日期/时间的 $startunix 和 $endunixm。你不允许改变演员阵容吗?我以为你可以,因为这两列都是 010109 (mmddyy) 格式的日期。所以我想如果你将 DateUpdated 更改为 DateAdded(两列的标题),那么查询应该可以工作,只是基于为 DateAdded 而不是 DateUpdated 选择的日期范围。

任何帮助或见解将不胜感激。如果您需要更多信息,请询问,我将尽我所能提供。

4

1 回答 1

1

DateAdded在您的情况下,您将通过检查 if andDateUpdated不为空来避免上述错误。添加DateAdded IS NOT NULLin where 子句。

最好在数据库中插入一次准备好的值,而不是每次查询数据库时解析它。你说你正在使用:

$startunix     = date("Y-m-d H:i:s", strtotime($startdate));
$startunixmn   = date("Y-m-d 23:59:59", strtotime($startdate));
$endunix       = date("Y-m-d H:i:s", strtotime($enddate));
$endunixmn     = date("Y-m-d 23:59:59", strtotime($enddate));

但是mmddYY格式中的字符串从何而来?如果您使用正确的日期填充DateAddedandDateUpdated字段(在此处检查),您将能够避免DateAdded每次都从字段中创建新值。此外,如果您不需要时间,您可以使用Y-m-d格式代替,Y-m-d H:i:s并且可以将您的查询缩短为如下所示:

SELECT CardNo as CardNo, LastName as CLname, FirstName as CFname, Email as CEmail ,DateUpdated as CUpdated, DateAdded as CEntered FROM cards
WHERE recemail = 'YES' AND email IS NOT NULL AND email <> '' AND (DateAdded BETWEEN '2013-07-29' AND '2013-08-02') ORDER BY DateAdded desc, CardNo
于 2013-08-03T16:48:55.360 回答