쓸만한게 없네 윤선식입니다.
여러군데 나온 적 있는 .NET CLR을 사용한 음력/양력 달력 만들기를 간단하게 설명하고자 합니다.
1. 새 프로젝트로 데이터베이스의 SQL CLR 프로젝트로 만듭니다.
2. 이 때 SQL 연결설정을 해 주셔야 합니다. SQL Server Project는 SQL 2005 이상이어야 합니다.
3. 프로젝트를 생성하면 클래스가 나옵니다. 이 때 다음과 같이 .NET Code를 넣어주시면 됩니다.
음력/양력 변환 소스인데요. 원리는 여러 군데 게시판에 있으니 설명을 생략하겠습니다.
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.Globalization;
public partial class UserDefinedFunctions
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlDateTime Udf_Lunar2Solar(SqlDateTime sDt)
{
DateTime dt = (DateTime)sDt;
bool bExistLeap = false;
KoreanLunisolarCalendar kr_Lunnar = new KoreanLunisolarCalendar();
int _lunnarYY = kr_Lunnar.GetYear(dt);
int _lunnarMM = kr_Lunnar.GetMonth(dt);
int _lunnarDD = kr_Lunnar.GetDayOfMonth(dt);
if (kr_Lunnar.GetMonthsInYear(_lunnarYY) > 12)
{
bExistLeap = kr_Lunnar.IsLeapMonth(_lunnarYY, _lunnarMM);
int intLeap_mm = kr_Lunnar.GetLeapMonth(_lunnarYY);
if (_lunnarMM >= intLeap_mm)
{
_lunnarMM--;
}
}
return Convert.ToDateTime(_lunnarYY.ToString() + "-" + _lunnarMM.ToString() + "-" + _lunnarDD.ToString());
}
};
SET NOCOUNT ON;
USE master;
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
GO
5. 위와 같이 CLR을 사용하게 변경하고 나서 해당 Assembly를 DB에 등록합니다.
use TestDB
Go
CREATE ASSEMBLY UDF_Lunar2Solar
FROM 'D:\SQLNetProjects\UDF_Lunar2Solar\UDF_Lunar2Solar\bin\Debug\UDF_Lunar2Solar.dll'
WITH PERMISSION_SET = SAFE;
CREATE FUNCTION UFN_Lunar2Solar (@sDt as DATETIME)
RETURNS DateTime
AS EXTERNAL NAME UDF_Lunar2Solar.UserDefinedFunctions.Udf_Lunar2Solar
GO
6. Assembly를 Function에 정상적으로 등록하고 나면 Function으로 사용이 가능합니다.
with sTB as (
select x = dbo.UFN_Lunar2Solar(cast('1985-03-19' as datetime))
, y = dbo.UFN_Lunar2Solar('19850319')
, z = dbo.UFN_Lunar2Solar('1985/03/19')
)
select * from sTB
* 결과
x y z
----------------------- ----------------------- -----------------------
1985-01-28 00:00:00.000 1985-01-28 00:00:00.000 1985-01-28 00:00:00.000
(1개 행이 영향을 받음)
이상입니다.