2012-11-14 10 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私は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 

、私がすることができ、ループ私の注文テーブルから時刻を取得する結果の周りに私の支払いテーブルから日付に追加し、新しい日付/時間でフィールドを更新します。

日付/時刻の再挿入はかなり処理できます。それは私が確信していない時間のない行を選択するだけですか?

ご協力いただければ幸いです。

、彼らが参加する必要がある場合は、以下の注文と支払いの両方のためのselect文です。(ちょうどFYI)

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

なぜこの情報を2か所に保存したいのですか?表面だけで、私はデータ構造に疑問を抱くだろうと思う。 – mikeY

+0

こんにちはmikeY それは2つの場所にある理由は、顧客が支払うことができ、支払日/時間が個々の支払いを記録するということです。しかし、私はクライアントがこれをまだ開始していないことが幸運なことです。したがって、注文は注文と同時に確定しています。なぜ今私は注文時間を引き出すことができますか?後日これらはほぼ確実に異なる日時になります。 –

+0

そうですか。 tbl_paymentsの決済日が注文日と等しいため、今は必ずしもそうなるわけではありません。また、顧客xは、注文#2001の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

あなたはおそらくそれらを得ることができますスマートS​​QLサーブかにもよるが、特に効率的ではないかもしれない

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

を、:timecastingによる値と0をチェックしますrのインデックスは次のとおりです。このような

+0

+1 'time'の使い勝手:) – Leigh

+0

うーん...このコードを実行すると、時間がtinyintと互換性がないのですか?フィールドはdatetimeに間違いなく設定されていますか? –

+1

Hmは、 '= '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

FYI、答えは小さな誤字を修正するために更新されました。 – Leigh

関連する問題