SQL Server에서 MAC address를 곧바로 대소 비교가 가능한 정수 타입으로 변환하는 함수는 없기 때문에, 아래와 같이 변환하는 함수 (!= 스토어드 프로시저)를 하나 만들고 시작해야 할 것 같아보이네요!
CREATE FUNCTION dbo.ConvertMacAddressToInteger (@macAddress NVARCHAR(17))
RETURNS BIGINT
AS
BEGIN
DECLARE @hexString NVARCHAR(12)
DECLARE @hexTable TABLE (HexValue CHAR(1), DecValue INT)
-- HEX 값을 10진수로 변환하기 위한 테이블 생성
INSERT INTO @hexTable (HexValue, DecValue)
VALUES ('0', 0), ('1', 1), ('2', 2), ('3', 3), ('4', 4), ('5', 5),
('6', 6), ('7', 7), ('8', 8), ('9', 9), ('A', 10), ('B', 11),
('C', 12), ('D', 13), ('E', 14), ('F', 15)
-- MAC 주소에서 콜론(:) 제거
SET @macAddress = REPLACE(@macAddress, ':', '')
-- MAC 주소의 앞 12자리를 HEX 값으로 추출
SET @hexString = LEFT(@macAddress, 12)
-- HEX 값을 10진수로 변환하여 계산
DECLARE @result BIGINT = (
SELECT SUM(DecValue * POWER(16, 11 - (ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) - 1)))
FROM (
SELECT SUBSTRING(@hexString, number, 1) AS HexChar
FROM master.dbo.spt_values
WHERE type = 'P' AND number BETWEEN 1 AND 12
) AS HexChars
JOIN @hexTable AS HexValues ON HexChars.HexChar = HexValues.HexValue
)
RETURN @result
END
그리고 아래와 같이 쓸 수 있을 겁니다.
DECLARE @macAddress NVARCHAR(17)
SET @macAddress = '12:34:56:78:9A:BC'
SELECT dbo.ConvertMacAddressToInteger(@macAddress) AS MacAddressInteger
테스트를 해보셔야 겠지만, 303F0000000F
값을 정수값으로 만들어놓고, 대소 비교를 하면서 원하는 목적을 달성하실 수 있지 않을까 싶습니다.
참고로, 이 방법을 쓴다고 해도 SQL Server에 많은 부하를 주는건 피하기 어려울 것 같습니다. 라이브/프로덕션 데이터베이스에서 작업하기 부담스러우시다면, MDF/LDF 파일만 다른 곳으로 백업하셔서 분리된 인스턴스나 SQL Local DB 등에서 작업하시면 좀 더 안전할 것 같습니다.
혹시 더 좋은 방법/아이디어가 있을지도 모르겠네요!