Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cập nhật các giá trị chuỗi trong bảng sẽ được lặp lại, chẳng hạn như chuỗi YYYYMMDD thành chuỗi MMDDYYYY

Giả sử cột ngày của chúng ta là char hoặc varchar , bạn có thể làm điều gì đó như thế này

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

Hoặc điều này

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

Nếu tất cả những gì bạn muốn làm là hiển thị văn bản của bạn theo cách khác, cách dễ nhất là

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

Hoặc tạo một dạng xem và sử dụng dạng đó thay cho bảng gốc:

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

Nhưng nếu bạn sử dụng các loại dữ liệu ngày / giờ thực tế, người dùng dữ liệu của bạn sẽ đưa chúng được ánh xạ tới các loại ngày / giờ phù hợp trong ứng dụng khách và sau đó có thể chọn cách tốt nhất để hiển thị chúng theo nhu cầu của họ.

Ưu điểm khác của việc sử dụng các loại ngày / giờ là chúng thực thi tính toàn vẹn của dữ liệu . Chờ cho đến khi ai đó thêm hoặc thay đổi ngày để làm cho ngày đó không hợp lệ - giả sử, `` 20142331 ''. Sau đó, khi bạn cần hiển thị dữ liệu đó ở dạng có tên tháng (chẳng hạn như 'ngày 22 tháng 1 năm 2014), sự vui nhộn sẽ xảy ra sau đó khi bạn gặp một ngoại lệ khi cố gắng ánh xạ số tháng thành tên tháng.

Nếu bạn không sử dụng loại ngày / giờ, hãy lưu trữ năm, tháng và ngày riêng lẻ dưới dạng giá trị số nguyên với các ràng buộc kiểm tra phù hợp để thực thi tính toàn vẹn:

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. SQL Server 2016:Tạo bảng

  2. đảo và khoảng trống tsql

  3. TODATETIMEOFFSET () Ví dụ trong SQL Server

  4. Truy vấn chạy nhanh, nhưng chạy chậm trong thủ tục được lưu trữ

  5. Làm cách nào để tiện ích mở rộng SQLSRV hoạt động với PHP, vì MSSQL không được dùng nữa?