0

SQL Server2008R2を使用しています。3番目のパラメーターとして異なるフォーマットコードでCONVERTを使用して、最初にDATETIMEに変換し、別のフォーマットコードでVARCHARに再度CONVERTして、表示フォーマットを変更できることを知っています。

現在の本当の問題は、1つの列に生データが混在していることです。だから私の質問は、混合YYYY / MM / DD、DD / MM/YYYYすべてからDD/MM / YYYYに表示する単一のSELECTステートメントをどのように書くのですか?

ISDATE()を使用しようとしましたが、2013年1月31日は日付ではなく、2013年1月1日は日付であると思われます。今では、正しい入力形式を決定するためにYYYYが左側にあるか右側にあるかを確認することしか考えられませんでしたが、単一のSELECTステートメントでそれを書き出す方法がわかりません。

最初にフォーマットを変更してから単純なSELECTを実行する手順はオプションではありません。ソースを変更することは許可されていません。

ありがとうございました

4

2 に答える 2

5

文字列操作だけを使用しないのはなぜですか? 何かのようなもの:

select (case when substring(d, 5, 1) = '/'  -- YYYY/MM/DD
             then right(d, 2)+'/'+substring(6, 2)+'/'+left(d, 4)
             else d
        end)

ところで、文字列として表される日付の形式を選択する場合は、比較演算子が機能するため、YYYY-MM-DD (または YYYY/MM/DD) を強くお勧めします。

于 2013-01-09T01:20:39.527 に答える
1

これらの 2 つの形式 (yyyy/mm/dd と dd/mm/yyyy) のみがデータに存在することが確実な場合は、おそらく次CASEの行に沿ったステートメントで問題を解決できます。

CASE
  WHEN (SUBSTRING(dateColumn, 5, 1) = '/') THEN CONVERT(datetime, dateColumn, 111)
  ELSE CONVERT(datetime, dateColumn, 103)
END
于 2013-01-09T01:29:27.680 に答える