2012-11-14 31 views
5

在测试期间,我没有注意到某些订单上的数据库中的日期/时间不正确。我只输入日期,而不是输入日期和时间。我用的是正确的时间戳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输入的时间所有付款,然后我就可以循环围绕结果抓取我的订单表中的时间将其添加到我的付款表中的日期,并用新的日期/时间更新字段。

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

任何帮助,将不胜感激。

以下是这两个订单和支付,如果他们需要被连接的select语句。(仅供参考)

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 
+0

请问你为什么会想这些信息存储在两个地方?就表面而言,我想我会质疑数据结构。 – mikeY

+0

嗨米奇 的原因,它是在两个地方是,客户将能够支付账户和支付日期/时间将记录个人缴费。然而,我很幸运,客户还没有开始这样做,因此订单已经在订货的同时得到解决,因此我现在可以把订单拖到现在。在以后的日子里,这些将几乎确定不同的日期和时间。 –

+0

好的。我懂了。仅仅因为tbl_payments中的结算日期等于订单日期并不意味着它总是会这样。对于订单#2001,客户x可能会在tbl_payments中进行多次付款。感谢您的解释。我只是好奇而已。 – mikeY

回答

6

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

select * 
from table 
where datePart(hour, datecolumn) = 0 
and datePart(minute, datecolumn) = 0 
and datePart(second, datecolumn) = 0 
and datePart(millisecond, datecolumn) = 0 
+0

嗨弥敦道,这工作完美!谢谢! –

6

你也许可以得到这些通过数值来castingtime检查0:

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

这可能不是特别有效,虽然,这取决于智能SQL如何服务r的索引是。

+0

+1使用'time':) – Leigh

+0

嗯...运行这段代码时我得到的时间与tinyint不兼容?该字段绝对设置为datetime? –

+1

嗯可能需要'= '00:00''而不是'= 0'或类似的东西。我没有用于测试的SQL Server副本。 –

3

像这样的东西应该工作:

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

这将返回在时间丢失的所有行。

+0

这适用于extra = removed(按照Leigh的建议)谢谢。 –

+1

仅供参考,解答更新以纠正小写字母错误。 – Leigh

相关问题