SQL 文字列を日付に変換する

SQL 文字列を日付に変換する

数日間、本当に困惑しており、助けを求めています。SQL Server 2017 を使用しています。

自由形式のフィールドからの文字列を処理して、それを「dd/mm/yyyy」形式の日付に変換するか、この形式でない場合はテキストをそのまま表示しようとしています。

私はこれをVIEWで必要としているので、SET LANGUAGEは使用できません。変換するそして日付しかし動作しないようです。

したがって、以下のコード スニペット (これは VIEW 内にあることに注意してください) では、テキストを読み取り、文字列が日付に変換される場合 (つまり、「dd/mm/yyyy」の形式である場合は、Excel が取得できるように日付形式にする必要があるため (Connect SQL Sever Database 経由)、日付に変換されない場合は、テキストをそのまま表示します。

create table dateTest1 
( idx int, 
 dateStringTest varchar(15) 
); 
  
insert into dateTest1 (idx, dateStringTest) 
values (1, '13/01/2021'), (2, 'no'); 
 
 
select 
       case when isdate(convert(datetime, dateStringTest, 103)) = 1 
       then convert(datetime, dateStringTest, 103)
       else dateStringTest 
       end as dtres
from dateTest1 
--where idx = 1 
  
-- error: Msg 241, Level 16, State 1, Line 15 Conversion failed when converting date and/or time from character string. 
-- this error happens for idx = 2. Idx = 1 works ok

頭が混乱しているので、これに関するご助力があれば大変助かります。

よろしくお願いしますポール

答え1

お使いのデータベースがこれを実行するのにどれほど適しているかはわかりません。SQL Server のデータ変換機能は、他のものに比べて少し「扱いにくい」です。

ただし、データベースの観点から見ると、

もし何かが想定になる日付、 それからすべきである日付。
「欠落している」(つまりnull可能)かもしれないが、それ以外のことはあり得ない
だったそれ以外のものであるとみなされるなら、それは扱われるべきではないとして1つの日付

ユーザーは入力できません日付- だけキャラクターの表現アプリケーションから[数値と]日付を表示するには、
出力時にフォーマットする必要があります。
アプリケーションに[数値と]日付を読み込むには、その逆、つまり入力時に[フォーマット解除](そしてもちろん検証)が必要です。
データはいつも保存される正しいデータ タイプ - 「適切な仕事に適切なツール」。

フリーテキスト解析はおそらくアプリケーション内で日付値を抽出し、検証して「フォーマット解除」してから保存するのが最適です。

関連情報