是否有方法仅从mysql中的特定列中选择符合下列条件的字段:
最大长度=9个前3个字符必须是HSA,最后6个字符必须是INT,6个数字必须以0开头。这可能会改变以后,从1/2开始,等等。
下表显示了基本架构和可能的字段值。
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行是无效的行,必须使用igonred。
我尝试了以下方法,尽管这没有提供正确的结果,因为它只提供了部分解决方案:
, 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
谢谢
发布于 2017-01-27 08:03:25
这个查询是使用MySQL的regex操作符REGEXP的一个很好的候选。请注意,可以通过与以下regex匹配来满足所有需求:
^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不区分大小写,因此需要一个解决办法。
发布于 2017-01-27 08:09:10
您可以选择默认条件为真的行。
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]+$'https://stackoverflow.com/questions/41889158
复制相似问题