sql >> データベース >  >> RDS >> Sqlserver

YYYYMMDD 文字列から MMDDYYYY 文字列へのフロップアラウンドなど、テーブル内の文字列値の更新

    日付列が char であると仮定します または varchar 、このようなことができます

    update foo
    set dates = right(dates,4) + left(dates,4)
    

    またはこれ

    update foo
    set dates = replace( convert(varchar,convert(datetime,dates,112),110) , '-' , '' )
    

    やりたいことが表示だけなら あなたのテキストは別の方法で、最も簡単な方法は

    select ... ,
           dates = right(dates,4) + left(dates,4)
    from foo
    

    または、ビューを作成して、元のテーブルの代わりに使用します:

    create view foo_view
    as select id ,
              dates = right(dates,4) + left(dates,4)
       from foo
    

    ただし、実際の日付/時刻データ型を使用すると、データのユーザーはクライアントで適切な日付/時刻型にマッピングされ、ニーズに合わせて最適な表示方法を選択できます。

    日付/時刻型を使用するもう 1 つの利点は、データの整合性が強制されることです。 .誰かが日付を追加または変更して無効にするまで待ちます — たとえば、「20142331」。次に、そのデータを月名付きのフォーム ('2014 年 1 月 22 日など) に表示する必要がある場合、月番号を月名にマップしようとして例外が発生すると、陽気になります。

    日付/時刻型を使用しない場合は、年、月、日を整数値として個別に格納し、整合性を確保するために適切なチェック制約を適用します。

    create table foo
    (
      id   int not null identity(1,1) primary key ,
      yyyy int not null check ( yyyy between 1900 and 2100 ) ,
      mm   int not null check ( mm between 1 and 12 ) ,
      dd   int not null check ( dd between 1 and ( case mm
                                                     when  4 then 30
                                                     when  6 then 30
                                                     when  9 then 30
                                                     when 11 then 30
                                                     when  2 then case
                                                                    when yyyy % 400 = 0 then 29
                                                                    when yyyy % 100 = 0 then 28
                                                                    when yyyy % 4   = 0 then 29
                                                                    else                     28
                                                                  end
                                                     else 31
                                                   end
                                                 )
                              )
    


    1. アップグレードされたdbForgeStudiofor MySQL、v.8.1でのMariaDB10.4のサポート

    2. [xxx]の未定義メソッド`to_key'のエラー:Active Admin table_for(Rails、Postgresql、postgres_ext gem)で配列データを使用しようとしたときの配列

    3. OracleでID列をリセットする方法

    4. SQLの挿入ステートメント内のselectステートメントは複数の行を返します