0

YYYY-MM-DD HH:MM:SS.MSSの形式で日付と時刻の値を格納する列があります。日付と時刻の値を「M/D / YYYYHH:MM:SSAM」の形式の文字列として格納する別のテーブルがあります。

ここで、YYYY-MM-DD HH:MM:SS.MSSこの形式をM / D / YYYY HH:MM:SSAMに変換するにはどうすればよいですか。変換後、変換日を日時文字列と比較できますか?例えば

A.Date_time = '2013-01-08 12:04:00.000' B.Date_time = convert(A.Date_time)-M / D / YYYY HH:MM:SSAM..の形式で変換します。

if(B.Date_time ='convert(A.Date_time)'-変換日を日時文字列と比較するにはどうすればよいですか。..。

4

1 に答える 1

1

文字列に変換して比較するのではなく、日付に変換して比較します。

SELECT <cols>
  FROM A
  INNER JOIN B
  ON A.Date_time = CONVERT(DATETIME, B.Date_time, 101);

最初にデータをクリーンアップする必要があるかもしれません.文字列を使用して日付を保存する場合(さまざまな理由でこれを行うべきではありません)、誰もが検証なしでジャンクをそこに詰め込むことができます. したがって、すべての値正常に日時に変換されるという保証はありません。

変更された要件については、次の方法でひどい文字列の日時部分を調べることができます。

SELECT <cols>
  FROM A
  INNER JOIN B
  ON A.Date_time = CONVERT(DATETIME, 
   SUBSTRING(B.Date_time, CHARINDEX(' - ', B.Date_time) + 3, 255), 101);

たとえば、最初にそれを引き出すこともできます

;WITH x AS (SELECT B.Date_time, RealDateTime = CONVERT(DATETIME, 
   SUBSTRING(B.Date_time, CHARINDEX(' - ', B.Date_time) + 3, 255), 101)
   FROM B
)
SELECT x.Date_time, x.RealDateTime FROM x
-- add joins, comparisons, etc.

私見では、違いを回避するのではなく、データ型の修正に集中する必要があります。または、少なくとも、この混乱を片付けるためにこの混乱を設計した人々と議論します.

于 2013-01-11T17:11:00.280 に答える