设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1361|回复: 1
打印 上一主题 下一主题

【函数】:提取汉字、英文字母和数值

[复制链接]
跳转到指定楼层
1#
发表于 2023-5-26 20:03:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前不久在某论坛发现有人问怎么提取汉字、英文字母和数值。但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
复制代码
附件如下所示:


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2023-11-13 21:01:30 来自手机 | 只看该作者
谢谢分享,先收藏
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-23 20:16 , Processed in 0.103708 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表