6

在测试期间,我没有注意到某些订单的数据库中的日期/时间输入不正确。而不是输入日期和时间,我只输入了日期。我使用了正确的时间戳,createodbcdatetime(now())但是我用它来cfsqltype="cf_sql_date"将其输入数据库。

我很幸运能够正确记录订单日期/时间,这意味着我可以使用订单日期/时间字段中的时间。

我的问题是我可以过滤表中只输入日期的所有行。我的数据如下;

表名:tbl_orders

uid_orders    dte_order_stamp
2000          02/07/2012 03:02:52
2001          03/07/2012 01:24:21
2002          03/07/2012 08:34:00

表名:tbl_payments

uid_payment  dte_pay_paydate      uid_pay_orderid
1234         02/07/2012 03:02:52  2000
1235         03/07/2012           2001
1236         03/07/2012           2002

我需要能够选择没有从 tbl_payments 输入时间的所有付款,然后我可以循环从我的订单表中获取时间的结果,将其添加到我的付款表中的日期,并使用新的日期/时间更新该字段。

我几乎可以处理重新插入日期/时间。它只是选择我不确定的无时间行?

任何帮助,将不胜感激。

以下是订单和付款的选择语句以及是否需要加入它们。(仅供参考)

SQL Server 2008,冷融合 9

  SELECT 
  dbo.tbl_orders.uid_orders,
  dbo.tbl_orders.dte_order_stamp,
  dbo.tbl_payment.dte_pay_paydate,
  dbo.tbl_payment.uid_pay_orderid
  FROM
  dbo.tbl_orders
  INNER JOIN dbo.tbl_payment ON (dbo.tbl_orders.uid_orders = dbo.tbl_payment.uid_pay_orderid)


  SELECT 
  dbo.tbl_orders.uid_orders,
  dbo.tbl_orders.dte_order_stamp
  FROM dbo.tbl_orders

SELECT 
  uid_paymentid,
  uid_pay_orderid,
  dte_pay_paydate,
FROM 
  dbo.tbl_payment
4

3 回答 3

8

选择小时、分钟、秒和毫秒值为零的记录。

select *
from table
where datePart(hour, datecolumn) = 0
and datePart(minute, datecolumn) = 0
and datePart(second, datecolumn) = 0
and datePart(millisecond, datecolumn) = 0
于 2012-11-14T17:57:21.173 回答
6

您可能可以通过转换时间并检查 0 来获得这些值:

SELECT * FROM table WHERE CAST(datetimecolumn AS TIME) = '00:00'

不过,这可能不是特别有效,具体取决于 SQL Server 索引的智能程度。

于 2012-11-14T17:51:32.457 回答
3

像这样的东西应该工作:

....
WHERE CAST(CONVERT(VARCHAR, dbo.tbl_payment.dte_pay_paydate, 101) AS DATETIME) = 
          dbo.tbl_payment.dte_pay_paydate

这将返回缺少时间的所有行。

于 2012-11-14T17:51:40.187 回答