SELECT
  CASE
    WHEN CHARINDEX('  ', prd_name) > 0
     AND CHARINDEX('  ', prd_name, CHARINDEX('  ', prd_name) + 2) > 0
    THEN SUBSTRING(
           prd_name,
           CHARINDEX('  ', prd_name) + 2,
           CHARINDEX('  ', prd_name, CHARINDEX('  ', prd_name) + 2)
             - CHARINDEX('  ', prd_name) - 2
         )
    ELSE prd_name
  END AS color
FROM tf_pss
WHERE ps_no = :ps_no AND itm = :itm;

新版本如下:

SELECT
  CASE
    WHEN c.color IS NOT NULL THEN c.color
    WHEN CHARINDEX(' ', r.rest) > 0
      THEN LEFT(r.rest, CHARINDEX(' ', r.rest) - 1)
    WHEN CHARINDEX('(', r.rest) > 0
      THEN LEFT(r.rest, CHARINDEX('(', r.rest) - 1)
    ELSE r.rest
  END AS color
FROM tf_pss
CROSS APPLY (
  SELECT LTRIM(SUBSTRING(prd_name, CHARINDEX(' ', prd_name) + 1, LEN(prd_name))) AS rest
) r
OUTER APPLY (
  SELECT TOP 1 color
  FROM (VALUES
    ('白色'),('黑色'),('红色'),('橙色'),('黄色'),('绿色'),('蓝色'),('紫色'),
    ('粉色'),('灰色'),('银色'),('金色'),('棕色'),('青色'),('玫红'),('酒红'),
    ('深空灰'),('浅灰'),('米色'),('杏色'),('卡其'),('军绿'),('藏青'),('香槟'),
    ('透明'),('彩色'),('花色'),('古铜'),('玫瑰金'),('天空蓝'),('湖蓝'),
    ('薄荷绿'),('咖啡'),('驼色'),('姜黄'),('宝蓝'),('天蓝'),('墨绿'),('荧光绿')
  ) AS colors(color)
  WHERE r.rest LIKE color + '%'
  ORDER BY LEN(color) DESC
) c
WHERE ps_no = :ps_no and itm=:itm
最后修改:2026 年 07 月 27 日
如果觉得我的文章对你有用,请随意赞赏