Showing posts with label SQL Server. Show all posts
Showing posts with label SQL Server. Show all posts

Friday, January 30, 2015

Cek Berapa Lama Proses Recovery Database SQL Server 2008

Berikut Querynya :
  
DECLARE @DBName VARCHAR(64) = 'BSSHISTORICAL'
 
DECLARE @ErrorLog AS TABLE([LogDate] CHAR(24), [ProcessInfo] VARCHAR(64), [TEXT] VARCHAR(MAX))
 
INSERT INTO @ErrorLog
EXEC sys.xp_readerrorlog 0, 1, 'Recovery of database', @DBName
 
SELECT TOP 5
  [LogDate]
 ,SUBSTRING([TEXT], CHARINDEX(') is ', [TEXT]) + 4,CHARINDEX(' complete (', [TEXT]) - CHARINDEX(') is ', [TEXT]) - 4) AS PercentComplete
 ,CAST(SUBSTRING([TEXT], CHARINDEX('approximately', [TEXT]) + 13,CHARINDEX(' seconds remain', [TEXT]) - CHARINDEX('approximately', [TEXT]) - 13) AS FLOAT)/60.0 AS MinutesRemaining
 ,CAST(SUBSTRING([TEXT], CHARINDEX('approximately', [TEXT]) + 13,CHARINDEX(' seconds remain', [TEXT]) - CHARINDEX('approximately', [TEXT]) - 13) AS FLOAT)/60.0/60.0 AS HoursRemaining
 ,[TEXT]
 
FROM @ErrorLog ORDER BY [LogDate] DESC
Hasilnya :

Silahkan Mencoba :)

Thursday, November 20, 2014

Mengatasi Error Collation conflict di SQL Server (Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.)

Hai,

Pada saat anda membuat query lalu menjalankan query tersebut lalu muncul Error seperti dibawah ini :
Msg 468, Level 16, State 9, Line 6
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Latin1_General_CI_AS" in the equal to operation.


Jangan panik...tetep tenang dan lanjutkan membaca artikel ini, kalo anda liat query yg anda tulis itu sudah benar tapi kenapa masih error yah ?

Hal itu terjadi karena perbedaan Collation antara table yang di joinkan tersebut.

cara mengatasinya anda cukup merubah Collation field tersebut menjadi Default dengan menambahkan Script :

COLLATE DATABASE_DEFAULT

Contoh :
 
 SELECT *
  FROM [tbl_karyawan] A
  left join
  tbl_ gaji B
  on A.nip = B.nip

 Menjadi :

 SELECT *
  FROM [tbl_karyawan] A
  left join
  tbl_ gaji B
  on A.nip COLLATE DATABASE_DEFAULT = B.nip COLLATE DATABASE_DEFAULT

Gimana mudah bukan ?

Wednesday, November 19, 2014

Konversi Tanggal di SQL SERVER

declare @periode as varchar(8),@periode_date as date
set @periode = '20141031'
set @periode_date ='2014-10-31'
select CONVERT(date,@periode) as HASIL
SELECT CONVERT(CHAR(10),@periode_date,110)  as HASIL
union all
SELECT CONVERT(CHAR(10),@periode_date,111)  
union all
SELECT CONVERT(CHAR(10),@periode_date,112)
union all
SELECT CONVERT(CHAR(15),@periode_date,113)  
union all
SELECT CONVERT(CHAR(15),@periode_date,109)
union all
SELECT CONVERT(CHAR(15),@periode_date,107)
union all
SELECT CONVERT(CHAR(15),@periode_date,106)
union all
SELECT CONVERT(CHAR(15),@periode_date,105)
union all
SELECT CONVERT(CHAR(15),@periode_date,104)
union all
SELECT CONVERT(CHAR(15),@periode_date,103)
union all
SELECT CONVERT(CHAR(15),@periode_date,102)
union all
SELECT CONVERT(CHAR(15),@periode_date,101)
union all
SELECT CONVERT(CHAR(15),@periode_date,100) 
Export to Excel General Format 
 
select cast(convert(decimal(12,0),convert(datetime,periode) + 2) 

Hasilnya :

Selamat Mencoba :)

Mencari Jumlah Karyawan Berdasarkan Range Umur di SQL Server

Hai, kali ini saya akan coba memberikan tutorial tentang bagaimana caranya mencari jumlah karyawan berdasarkan Range Umur, terkadang hal ini digunakan untuk melihat portofolio jumlah karyawan berdasarkan umur-umur tertentu.

oke lanjut, misalkan perusahaan kita mempunyai jumlah karyawan 1000 orang,dan kita hanya mempunyai informasi data sebagai berikut :

table karyawan :


data tersebut akan di buat laporan dengan format seperti ini :

Nah bagaimana penyelesaianya di SQL Server ?
Nih saya berikan contohnya untuk kasus diatas :

Pertama buat Query untuk mengetahui umur dari setiap karyawan berdasarkan tanggal lahir :

  
select nama_karyawan,tgllahir,datediff(year,tgllahir,GETDATE()) umur, case 
   when datediff(year,tgllahir,GETDATE()) between 18 and 35 then '[18-35]'
   when datediff(year,tgllahir,GETDATE()) between 36 and 40 then '[36-40]'
   when datediff(year,tgllahir,GETDATE()) between 41 and 45 then '[41-45]'
   when datediff(year,tgllahir,GETDATE()) between 46 and 50 then '[46-50]'
   when datediff(year,tgllahir,GETDATE()) between 51 and 55 then '[51-55]'
   when datediff(year,tgllahir,GETDATE()) between 56 and 60 then '[56-60]'
   when datediff(year,tgllahir,GETDATE()) between 61 and 65 then '[61-65]'
   when datediff(year,tgllahir,GETDATE()) between 61 and 65 then '[66-69]'
  end range_umur
  FROM  tbl_karyawan A


Maka hasilnya akan seperti ini
dari Query tersebut kita modifikasi sedikit seperti ini :

  
select range_umur,count(*) As Jumlah from (select  NAMA_KARYAWAN,tgllahir,datediff(year,tgllahir,GETDATE()) umur, case 
   when datediff(year,tgllahir,GETDATE()) between 18 and 35 then '[18-35]'
   when datediff(year,tgllahir,GETDATE()) between 36 and 40 then '[36-40]'
   when datediff(year,tgllahir,GETDATE()) between 41 and 45 then '[41-45]'
   when datediff(year,tgllahir,GETDATE()) between 46 and 50 then '[46-50]'
   when datediff(year,tgllahir,GETDATE()) between 51 and 55 then '[51-55]'
   when datediff(year,tgllahir,GETDATE()) between 56 and 60 then '[56-60]'
   when datediff(year,tgllahir,GETDATE()) between 61 and 65 then '[61-65]'
   when datediff(year,tgllahir,GETDATE()) between 61 and 65 then '[66-69]'
  end range_umur
  FROM  tbl_karyawan A  ) x
group by range_umur 


Sehingga hasilnya seperti ini :


Gimana, mudah bukan ?

Tuesday, November 18, 2014

Membuat Fungsi Kredit PMT, IPMT, PPMT, Future Value di SQL Server

Hai, Coders..
Biasanya  untuk membuat simulasi Perhitungan Angsuran Kredit (Pokok, Bunga dan Jumlah Cicilan) kita biasa menggunakan rumus PMT di Excel, nah kali ini saya akan coba share bagaimana sih membuat rumus tersebut di SQL Server ?

Caranya sangat mudah, lho kok mudah ? ya mudah orang anda tinggal Copy Paste dari sini hehe... 

 Pertama anda buat dulu Scalar Function didalam SQL Server, Gmn Caranya ? gampang kok tinggal copy paste Query di bawah ini lalu tinggal anda running dengan menekan tombol F5 pada Keyboard.

Future Value :
  
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[Fv] (@r decimal(18,18), @nper INT, @c float, @pv float, @type INT)  
RETURNS NUMERIC(18,0)
AS  
BEGIN  
 DECLARE @fv NUMERIC(18,2)  
 
 IF @type = 1  
 SET @c = @c * (1 + @r);  
 
 SET @fv = -(@c * (Power(1 + @r, @nper) - 1) / @r + @pv  
    * Power(1 + @r, @nper))  
 
 RETURN @fv  
END  
IPMT :
  
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


CREATE FUNCTION [dbo].[Ipmt] (@r decimal(18,18), @per INT, @nper INT, @pv float, @fv float, @type INT)  
RETURNS NUMERIC(20,2)   
AS  
BEGIN  
 DECLARE @ipmt NUMERIC(20,2)  
 SET @ipmt = dbo.Fv(@r, @per - 1, dbo.Pmt(@r, @nper, @pv, @fv, @type), @pv, @type) * @r  
 
 if @type = 1  
 SET @ipmt = @ipmt / (1 + @r)  
 RETURN @ipmt  
END  
GO
 

PMT :
  
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[Pmt] (@r decimal(18,18), @nper INT, @pv float, @fv float, @type INT)  
RETURNS NUMERIC(18,2)
AS  
BEGIN  
 DECLARE @pmt  NUMERIC(18,0) 
 
 SET @pmt = @r / (Power(1.0 + @r, @nper) - 1.0) * -(@pv * Power(1.0 + @r, @nper) + @fv)  
 
 if @type = 1  
 SET @pmt = @pmt / (1 + @r)  
 RETURN @pmt  
END  

GO
 

PPMT :
  
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[Ppmt] (@r NUMERIC(18,4), @per INT, @nper INT, @pv NUMERIC(18,4), @fv NUMERIC(18,4), @type INT)  
RETURNS NUMERIC(18,4)   
AS  
BEGIN  

 RETURN dbo.Pmt(@r, @nper, @pv, @fv, @type) - dbo.Ipmt(@r, @per, @nper, @pv, @fv, @type);  

END  

GO
 

Setelah semua Query di atas Berhasil di Running, maka untuk menggunakannya seperti ini :

Mencari Jumlah Angsuran perbulan (Bunga Efektif )

Contoh :
Nasabah : Andi Susanty
Jumlah Pinjaman (Plafond) : Rp. 35.000.000
Suku Bunga Efektif : 39,429% Per Tahun
Tenor : 3 Tahun (36 Bulan)


Untuk mencari jumlah angsuran yg harus Andi bayar perbulan yaitu :
PMT(SukuBunga/12,Tenor,JumlahPinjaman,0,0)

select -dbo.pmt(0.39429 / 12, 36,35000000,0,0)
= Rp. 1.672.212,-

untuk mencari porsi Bunga / Interest dalam tenor yg sedang berjalan ialah :

IPMT(SukuBunga/12,Angsuranke,Tenor,JumlahPinjaman,0,0)yaitu : Rp. 1.150.012,50


Pokok dan bunga itu berpengaruh terhadap jumlah angsuran yang telah di bayarkan, karena porsi pokok dan bunga itu setiap bulan akan berubah tergantung Angsuran ke Berapanya jika menggunakan suku bunga efektif.


Selamat berhitung...:)