2012-11-14 32 views
5

Trong khi thử nghiệm, tôi đã không nhận thấy mục nhập ngày/giờ không chính xác vào cơ sở dữ liệu trên các đơn hàng nhất định. Thay vì nhập ngày giờ tôi chỉ mới nhập ngày tháng. Tôi đã sử dụng dấu thời gian chính xác createodbcdatetime(now()) tuy nhiên tôi đã sử dụng cfsqltype="cf_sql_date" để nhập nó vào cơ sở dữ liệu.Tìm các hàng trong cơ sở dữ liệu không có thời gian trong cột ngày

Tôi đủ may mắn để có ngày/giờ đặt hàng được ghi chính xác, có nghĩa là tôi có thể sử dụng thời gian từ trường ngày/giờ đặt hàng.

Câu hỏi của tôi là tôi có thể lọc cho tất cả các hàng trong bảng chỉ có ngày được nhập. Dữ liệu của tôi bên dưới;

Bảng Tên: 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 

Bảng Tên: 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 

tôi cần để có thể chọn tất cả các khoản thanh toán không có thời gian nhập từ tbl_payments, tôi có thể sau đó vòng lặp xung quanh kết quả lấy thời gian từ bảng đặt hàng của tôi thêm nó vào ngày từ bảng thanh toán của tôi và cập nhật trường với ngày/giờ mới.

Tôi có thể xử lý khá nhiều việc chèn lại ngày/giờ. Nó chỉ chọn các hàng không có thời gian mà tôi không chắc chắn?

Mọi trợ giúp sẽ được đánh giá cao.

Sau đây là các câu SELECT cho cả đơn đặt hàng và thanh toán và nếu họ cần phải được tham gia. (Chỉ FYI)

SQL Server 2008, Cold Fusion 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

Tôi có thể hỏi lý do bạn muốn lưu trữ thông tin này ở hai nơi không? Chỉ cần trên bề mặt, tôi đoán tôi sẽ đặt câu hỏi về cấu trúc dữ liệu. – mikeY

+0

Hi mikeY Lý do ở hai nơi là khách hàng sẽ có thể thanh toán trên tài khoản và ngày/giờ thanh toán sẽ ghi lại các khoản thanh toán riêng lẻ. Tuy nhiên, tôi may mắn là khách hàng chưa bắt đầu điều này, và do đó các đơn đặt hàng đã được giải quyết tại cùng một thời điểm đặt hàng, do đó tại sao tôi có thể kéo thời gian đặt hàng ngay bây giờ. Vào một ngày sau này sẽ gần như chắc chắn ngày và giờ khác nhau. –

+0

OK. Tôi hiểu rồi. Chỉ vì ngày thanh toán trong tbl_payments bằng ngày đặt hàng hiện tại không có nghĩa là ngày nào cũng được. Và khách hàng x có khả năng có thể có nhiều hơn một khoản thanh toán bằng tbl_payments cho đơn hàng # 2001. Cảm ơn lời giải thích. Tôi chỉ là tò mò thôi. – mikeY

Trả lời

6

Chọn bản ghi có giá trị giờ, phút, giây và mili giây bằng không.

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

Xin chào Nathan, Điều này đã làm việc hoàn hảo! Cảm ơn bạn! –

6

Bạn có lẽ có thể có được những giá trị bằng casting để time và kiểm tra cho 0:

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

Đó có thể không đặc biệt hiệu quả tuy nhiên, tùy thuộc vào cách SQL thông minh Phục vụ Chỉ số của r là.

+0

+1 Sử dụng tốt thời gian 'time' :) – Leigh

+0

Umm ... khi chạy mã này tôi nhận được thời gian không tương thích với tinyint? Trường này chắc chắn được đặt thành datetime? –

+1

Hm có thể cần phải làm '= '00: 00'' thay vì' = 0' hoặc một cái gì đó tương tự. Tôi không có một bản sao của SQL Server để kiểm tra với. –

3

Something như thế này nên làm việc:

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

này sẽ trả lại tất cả các hàng nơi mà thời gian là mất tích.

+0

Điều này làm việc với extra = removed (theo gợi ý của Leigh) Cảm ơn bạn. –

+1

FYI, câu trả lời được cập nhật để sửa lỗi chính tả nhỏ. – Leigh

Các vấn đề liên quan