Office中国论坛/Access中国论坛

标题: 【函数】:提取汉字、英文字母和数值 [打印本页]

作者: roych    时间: 2023-5-26 20:03
标题: 【函数】:提取汉字、英文字母和数值
前不久在某论坛发现有人问怎么提取汉字、英文字母和数值。但SQL Server是不支持正则表达式的,因此需要写自定义函数。没错,我是让ChatGPT写的,这货写了三四次才写正确,真是的。现在分享给大家,希望能在工作中用上。

  1. create FUNCTION ExtractFromInputString
  2. (
  3.     @inputString NVARCHAR(MAX),
  4.     @extractType NVARCHAR(50)
  5. )
  6. RETURNS NVARCHAR(MAX)
  7. AS
  8. BEGIN
  9.     DECLARE @outputString NVARCHAR(MAX) = ''

  10.     IF @extractType = 'alpha'
  11.     BEGIN
  12.         SET @outputString = (
  13.             SELECT SUBSTRING(@inputString, n, 1)
  14.             FROM (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n FROM sys.columns) AS Numbers
  15.             WHERE SUBSTRING(@inputString, n, 1) COLLATE Latin1_General_BIN LIKE '[A-Za-z]'
  16.             FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'
  17.         )
  18.     END
  19.     ELSE IF @extractType = 'numeric'
  20.     BEGIN
  21.         SET @outputString = (
  22.             SELECT SUBSTRING(@inputString, n, 1)
  23.             FROM (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n FROM sys.columns) AS Numbers
  24.             WHERE SUBSTRING(@inputString, n, 1) LIKE '[0-9]'
  25.             FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'
  26.         )
  27.     END
  28.     ELSE IF @extractType = 'chinese'
  29.     BEGIN
  30.         SET @outputString = (
  31.             SELECT SUBSTRING(@inputString, n, 1)
  32.             FROM (SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS n FROM sys.columns) AS Numbers
  33.             WHERE UNICODE(SUBSTRING(@inputString, n, 1)) >= 19968
  34.               AND UNICODE(SUBSTRING(@inputString, n, 1)) <= 40959
  35.             FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'
  36.         )
  37.     END

  38.     RETURN @outputString
  39. END
复制代码
调用方法:
  1. select *, dbo.ExtractFromInputString(子类目, 'chinese') as 汉字,
  2. dbo.ExtractFromInputString(子类目, 'numeric') as 数字,
  3. dbo.ExtractFromInputString(子类目, 'alpha') as 字母 from testLag
复制代码
附件如下所示:
[attach]64565[/attach]


作者: worryd1    时间: 2023-11-13 21:01
谢谢分享,先收藏




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3