如何用SQL判断字符串是否为数字字符后接字母字符?
判断字符串是否为数字字符后接字母字符的SQL实现
需求规则
根据示例和要求,有效字符串需满足:
- 包含至少一组数字类字符(数字
0-9、小数点.、空格)和至少一组字母类字符(A-Za-z、空格) - 所有数字类字符仅出现在字母类字符之前,字母出现后不能再出现数字或小数点
- 不允许字母开头后接数字(如
a1),也不允许字母与数字交叉出现(如4d9)
实现代码
替换测试代码中的my_magic_expression,使用SQL Server的PATINDEX函数实现判断:
declare @t table (my_string varchar(10)) insert @t select '1.23bc' union -- 有效 select '4 d' union -- 有效 select 'a1' -- 无效 select CASE WHEN PATINDEX('%[A-Za-z][0-9.]%', my_string) = 0 AND PATINDEX('%[0-9]%', my_string) > 0 AND PATINDEX('%[A-Za-z]%', my_string) > 0 AND PATINDEX('^[A-Za-z]%', my_string) = 0 THEN '是' ELSE '否' END AS 结果 from @t
条件说明
每个PATINDEX条件的作用:
PATINDEX('%[A-Za-z][0-9.]%', my_string) = 0:排除字母后接数字/小数点的交叉情况(如4d9)PATINDEX('%[0-9]%', my_string) > 0:确保字符串包含至少一个数字,排除纯字母的无效情况PATINDEX('%[A-Za-z]%', my_string) > 0:确保字符串包含至少一个字母,排除纯数字的情况PATINDEX('^[A-Za-z]%', my_string) = 0:排除以字母开头后接数字的情况(如a1)
执行结果
执行上述代码后,将输出:
- 是
- 是
- 否
内容的提问来源于stack exchange,提问作者TDP
相关产品推荐
相关产品推荐

