SQL Server 2014中如何实现字符串字符类型模式提取函数?
SQL Server 2014 实现字符串模式生成函数
需求说明
将字符串中的字母替换为a、数字替换为1、其他字符替换为x(例如abc123-123转换为aaa111x111),生成Pattern列后可按该列分组统计数据条目数量。
自定义GETPATTERN函数实现
在SQL Server 2014中,可通过创建标量值函数逐字符判断并替换:
CREATE FUNCTION dbo.GETPATTERN(@InputString NVARCHAR(MAX)) RETURNS NVARCHAR(MAX) AS BEGIN DECLARE @Pattern NVARCHAR(MAX) = '' DECLARE @Index INT = 1 DECLARE @Char CHAR(1) WHILE @Index <= LEN(@InputString) BEGIN SET @Char = SUBSTRING(@InputString, @Index, 1) SET @Pattern = @Pattern + CASE WHEN @Char LIKE '[a-zA-Z]' THEN 'a' WHEN @Char LIKE '[0-9]' THEN '1' ELSE 'x' END SET @Index = @Index + 1 END RETURN @Pattern END GO
使用示例
假设存在表YourTable,包含目标列TargetColumn,执行以下语句生成模式并分组统计:
SELECT dbo.GETPATTERN(TargetColumn) AS Pattern, COUNT(*) AS Count FROM YourTable GROUP BY dbo.GETPATTERN(TargetColumn) ORDER BY Count DESC
Python 实现示例
对应逻辑的Python代码实现如下:
def get_pattern(input_str): pattern = [] for char in input_str: if char.isalpha(): pattern.append('a') elif char.isdigit(): pattern.append('1') else: pattern.append('x') return ''.join(pattern) # 测试示例 test_str = 'abc123-123' print(get_pattern(test_str)) # 输出: aaa111x111
内容的提问来源于stack exchange,提问作者ACrazyChemist
相关产品推荐
相关产品推荐

