Мне нужно вычислить номер проверки GTIN-14 (ITF-14) di git на SQL сервере с 13 di git varchar и вернуть вычисленное число 14 di git (как varchar).
Я нашел это сообщение , в котором создается табличная функция, но для работы в моем приложении мне нужна скалярная функция.
Любая помощь приветствуется.
CREATE FUNCTION [GtinCheckDigit]
(@Input VARCHAR(17))
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN
WITH [ReverseInput](S) AS
(
SELECT REVERSE(@Input)
), [CharCount](N) AS
(
SELECT n
FROM
(VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12),(13),(14),(15),(16),(17)) a(n)
), [CharPos](N,S) AS
(
SELECT TOP (LEN(@Input))
[CharCount].N, SUBSTRING([ReverseInput].S, [CharCount].N, 1)
FROM
[CharCount], [ReverseInput]
), [Multiplier](N) AS
(
SELECT
(S * CASE WHEN (N%2) = 0 THEN 1 ELSE 3 END)
FROM
[CharPos]
), [Checksum](N) AS
(
SELECT
CASE WHEN (SUM(N) % 10) > 0 THEN (10 - (SUM(N) % 10)) ELSE 0 END
FROM
[Multiplier]
)
SELECT @Input + CAST(N AS VARCHAR) AS [Output]
FROM [Checksum];