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]+$'
有没有办法 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]+$'