34,591
社区成员
发帖
与我相关
我的任务
分享
--更新
UPDATE #t SET gg=DBO.GetGG(na),
na=REPLACE(na,ISNULL(DBO.GetGG(na),''),'')
服务器: 消息 208,级别 16,状态 1,行 1
对象名 'DBO.GetGG' 无效。
服务器: 消息 208,级别 16,状态 1,行 1
对象名 'DBO.GetGG' 无效。
UPDATE #t SET gg=DBO.GetGG(na),
na=REPLACE(na,ISNULL(DBO.GetGG(na),''),'')
FROM #t
CREATE TABLE #t
(
na VARCHAR(20),
gg VARCHAR(10)
);
INSERT INTO #t ( na )
SELECT '可口可乐500ml' UNION ALL
SELECT '500ml可口可乐' UNION ALL
SELECT '旺仔QQ糖32g' UNION ALL
SELECT '可比克35g薯片' UNION ALL
SELECT '晨奇中性笔GP-148' UNION ALL
SELECT '114BY文具盒' UNION ALL
SELECT '2.5kg白糖' UNION ALL
SELECT '晨奇148象皮擦'
GO
-- 根据单位,获取 规格内容
CREATE FUNCTION DBO.GetGGByUnit(@na VARCHAR(20), @u VARCHAR(5))
RETURNS VARCHAR(10)
AS
BEGIN
-- 单位的位置.
DECLARE @idx INT
DECLARE @idx2 INT
-- 返回值.
DECLARE @returnValue VARCHAR(10)
-- 初始化.
SET @returnValue = NULL
-- 取得单位的位置.
SET @idx = CHARINDEX(@u, @na)
IF @idx + LEN(@u) - 1 = LEN(@na)
BEGIN
-- 这个 单位的 位置,是在名称的末尾
-- 需要向前找数字.
SET @returnValue = RIGHT(@na, LEN(@na) - PATINDEX('%[0-9]%', @na) + 1)
END
ELSE
BEGIN
-- 这个 单位的 位置, 不是在名称的末尾, 可能是在开头, 可能在中间
SET @idx2 = PATINDEX('%[0-9]%', @na);
IF @idx2 > @idx
BEGIN
-- 单位 与 数字的 关系
-- 是 先单位 后 数字的。是无效的数据.
SET @returnValue = NULL;
END
ELSE
BEGIN
-- 数字 在 单位 前面.
SET @returnValue = SUBSTRING(@na, @idx2, (@idx - @idx2 + 2) );
END
END
-- 返回.
RETURN @returnValue;
END;
GO
-- 获取 规格内容
CREATE FUNCTION DBO.GetGG(@na VARCHAR(20))
RETURNS VARCHAR(10)
AS
BEGIN
-- 返回值.
DECLARE @returnValue VARCHAR(10)
-- 初始化.
SET @returnValue = NULL
-- 这里根据需要,自行增加各种单位
IF CHARINDEX('ml', @na) > 0
BEGIN
SET @returnValue = DBO.GetGGByUnit(@na, 'ml')
END
ELSE IF CHARINDEX('kg', @na) > 0
BEGIN
SET @returnValue = DBO.GetGGByUnit(@na, 'kg')
END
ELSE IF CHARINDEX('g', @na) > 0
BEGIN
SET @returnValue = DBO.GetGGByUnit(@na, 'g')
END
-- 返回.
RETURN @returnValue
END;
GO
--更新
UPDATE #t SET gg=DBO.GetGG(na),
na=REPLACE(na,ISNULL(DBO.GetGG(na),''),'')
---
--UPDATE #t SET gg=DBO.GetGG(na),
-- na=REPLACE(na,ISNULL(DBO.GetGG(na),''),'')
-- FROM #t
---
SELECT * FROM #t
--删除演示环境
DROP FUNCTION DBO.GetGGByUnit,DBO.GetGG
DROP TABLE #T