Select 仅值长度和格式 - MySQL

Select only Value Length & Format - MySQL

有没有办法 select 仅 mysql 中特定列中满足以下条件的字段:

最大长度 = 9 前 3 个字符必须是 HSA 最后 6 个字符只能是 INT 6位数字必须以0开头...以后可能会更改为以1 / 2开头等

下面的 table 显示了基本架构和可能的字段值。

row | visit_date | field_value 
----+------------+--------------- 
1   |2016-12-07  |HSA023456   
2   |2016-12-08  |HSA059870 
3   |2016-12-06  |225981450    
4   |2016-12-05  |HSAB02354    
5   |2016-12-13  |HSA0234567   
6   |2016-12-14  |HSA    
7   |2016-12-14  |HSA0987    
8   |2016-12-16  |1234HSA00

第 1 - 3 行是有效行,必须返回。

第 4 - 8 行是无效行,必须被忽略。

我已经尝试了下面的方法,虽然这没有提供正确的结果,因为它只提供了部分解决方案:

,       CASE
            WHEN CHAR_LENGTH(NFB.field_value) > 8 AND NFB.field_value LIKE 'HSA%' THEN UPPER(NFB.field_value)
            WHEN CHAR_LENGTH(NFB.field_value) < 9 AND NFB.field_value LIKE 'HSA%' THEN CONCAT(UPPER(NFB.field_value),'VALIDATE')   

否则“” 结束 field_value

谢谢

此查询非常适合使用 MySQL 的正则表达式运算符 REGEXP。请注意,通过匹配以下正则表达式可以满足您的所有要求:

^HSA0[0-9][0-9][0-9][0-9][0-9]$

这完全匹配 9 个字符,它们以 HSA0 开头,后跟任何其他五个数字。

SELECT *
FROM yourTable
WHERE field_value REGEXP '^HSA0[0-9][0-9][0-9][0-9][0-9]$'

更新:

如果你只想限制为大写,那么你可以添加一个 LIKE 条件检查:

SELECT *
FROM yourTable
WHERE field_value REGEXP '^HSA0[0-9][0-9][0-9][0-9][0-9]$' AND
      field_value LIKE BINARY 'HSA%'

REGEXP 不区分大小写,因此需要解决方法。

您可以 select 您的条件为真的行

  select my_col
  from my_table
  where left(my_col, 3) = 'HSA'
  AND right(my_col,6) REGEXP '^-?[0-9]+$'
  AND left(right(my_col,6),1) ='0';

  select my_col
  from my_table
  where left(my_col, 3) = 'HSA0'
  AND right(my_col,6) REGEXP '^-?[0-9]+$'