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

Mengubah tanggal JDE Julian ke Gregorian

Saya pikir lebih efisien menggunakan matematika datetime asli daripada semua ini beralih bolak-balik ke berbagai format string, tanggal, dan numerik.

DECLARE @julian VARCHAR(6) = '111186';

SELECT DATEADD(YEAR, 
  100*CONVERT(INT, LEFT(@julian,1))
  +10*CONVERT(INT, SUBSTRING(@julian, 2,1))
  +CONVERT(INT, SUBSTRING(@julian,3,1)), 
 DATEADD(DAY, CONVERT(INT,SUBSTRING(@julian, 4, 3))-1, 
 0));

Hasil:

===================
2011-07-05 00:00:00

Dengan asumsi data ini tidak sering berubah, mungkin jauh lebih efisien untuk benar-benar menyimpan tanggal sebagai kolom yang dihitung (itulah sebabnya saya memilih tanggal dasar 0 alih-alih beberapa representasi string, yang akan menyebabkan masalah determinisme yang mencegah kolom bertahan dan berpotensi diindeks).

CREATE TABLE dbo.JDEDates
(
    JDEDate VARCHAR(6),

    GregorianDate AS CONVERT(SMALLDATETIME, 
      DATEADD(YEAR, 
        100*CONVERT(INT, LEFT(RIGHT('0'+JDEDate,6),1))
        +10*CONVERT(INT, SUBSTRING(RIGHT('0'+JDEDate,6), 2,1))
        +CONVERT(INT, SUBSTRING(RIGHT('0'+JDEDate,6),3,1)), 
      DATEADD(DAY, CONVERT(INT, RIGHT(JDEDate, 3))-1, 
      0))
    ) PERSISTED
);

INSERT dbo.JDEDates(JDEDate) SELECT '111186';

SELECT JDEDate, GregorianDate FROM dbo.JDEDates;

Hasil:

JDEDate GregorianDate
======= ===================
111186  2011-07-05 00:00:00

Bahkan jika Anda tidak mengindeks kolom, itu masih menyembunyikan perhitungan jelek dari Anda, karena Anda hanya membayarnya pada waktu penulisan, karena itu tidak menyebabkan Anda melakukan operasi fungsional yang mahal pada waktu kueri setiap kali kolom itu direferensikan ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan untuk membuat daftar jumlah catatan di setiap tabel dalam database

  2. Memecahkan Masalah Kemacetan I/O Disk

  3. apa masalahnya dengan AttachDbFilename?

  4. Cara menghitung Perkalian Lari

  5. Tambahkan kolom tabel baru ke posisi ordinal tertentu di Microsoft SQL Server