【发布时间】:2020-03-25 20:15:37
【问题描述】:
我需要在 SQL Server 中从 13 位 varchar 计算 GTIN-14 (ITF-14) 校验位,并返回 14 位计算数字(作为 varchar)。
我发现this post 创建了一个表值函数,但为了在我的应用程序中工作,我需要一个标量值函数。
任何帮助表示赞赏。
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];
【问题讨论】:
标签: sql-server user-defined-functions