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 から時間が入力されていないすべての支払いを選択できるようにする必要があります。その後、注文テーブルから時間を取得して結果をループし、それを支払いテーブルの日付に追加して、新しい日付/時間でフィールドを更新できます。

日付/時刻の再挿入はほとんど処理できます。よくわからない時間のない行を選択しているだけですか?

どんな助けでも大歓迎です。

以下は、注文と支払いの両方と、それらを結合する必要がある場合の select ステートメントです (参考までに)。

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
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 に答える