Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memperbarui nilai string dalam tabel yang akan di-flop seperti string YYYYMMDD ke string MMDDYYYY

Dengan asumsi kolom tanggal kami adalah char atau varchar , Anda bisa melakukan sesuatu seperti ini

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

Atau ini

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

Jika yang ingin Anda lakukan hanyalah tampilan teks Anda berbeda, cara termudah adalah

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

Atau buat tampilan dan gunakan itu sebagai ganti tabel asli:

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

Tetapi jika Anda menggunakan tipe data tanggal/waktu yang sebenarnya, pengguna data Anda akan membuat mereka dipetakan ke tipe tanggal/waktu yang sesuai di klien dan kemudian dapat memilih cara terbaik untuk menampilkannya sesuai kebutuhan mereka.

Keuntungan lain menggunakan tipe tanggal/waktu adalah mereka menerapkan integritas data . Tunggu hingga seseorang menambahkan atau mengubah tanggal agar tidak valid — katakan, `20142331'. Kemudian, ketika Anda perlu menampilkan data tersebut dalam formulir dengan nama bulan ('22 Jan 2014, katakanlah), kegembiraan akan terjadi ketika Anda mendapatkan pengecualian yang mencoba memetakan nomor bulan ke nama bulan.

Jika Anda tidak akan menggunakan jenis tanggal/waktu, simpan tahun, bulan, dan hari satu per satu sebagai nilai integer dengan batasan pemeriksaan yang sesuai untuk menegakkan integritas:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kompilasi ulang procs yang disimpan?

  2. Keandalan Ketergantungan Sql?

  3. SSRS Hapus Kolom dari Laporan

  4. SQL Server 2008 ke SQL Server Compact Edition?

  5. Ubah gumpalan VarBinary RTF menjadi teks di MS SQL