在Redshift中,我想返回包含数字或特殊字符的字段 EXCEPT。(其他值以及a-z和A-Z)
以下内容使我得到了包含数字的所有内容,但我需要将其扩展到除句号(。)之外的任何特殊字符
SELECT DISTINCT name
FROM table
WHERE name ~ '[0-9]'
我需要类似的东西:
SELECT DISTINCT name
FROM table
WHERE name ~ '[0-9]' OR name ~'[,#';:@~[]{}etcetc'
样本数据:
name
john
joh1n1
j!ohn!
jo!h2n
joh.n
jo.&hn
j.3ohn
j.$9ohn
预期输出:
name
joh1n1
j!ohn!
jo!h2n
jo.&hn
j.3ohn
j.$9ohn
答案 0 :(得分:1)
您可以这样做:
SELECT DISTINCT name FROM table WHERE name !~* '[a-z]'
这意味着:在name
个不包含任何字母数字字符的匹配。
Operator !~*
的意思是:
不匹配正则表达式,不区分大小写
编辑。
如果要匹配包含至少一个字母字符或点号以外的其他字符的名称,则可以执行以下操作:
select * from mytable where name ~* '[^a-z.]'
with mytable(name) as (values
('john'),
('joh1n1'),
('j!ohn!'),
('jo!h2n'),
('joh.n'),
('jo.&hn'),
('j.3ohn'),
('j.$9ohn')
)
select * from mytable where name ~* '[^a-z.]'
| name | | :------ | | joh1n1 | | j!ohn! | | jo!h2n | | jo.&hn | | j.3ohn | | j.$9ohn |
答案 1 :(得分:1)
您可以使用
WHERE name !~ '^[[:alpha:].]+$'
此处,将返回所有不只包含字母或点符号的记录。 ^
匹配字符串位置的开始,[[:alpha:].]+
匹配一个或多个字母或点,$
匹配字符串位置的结束。
如果是PostgreSQL,则可以使用
WHERE name SIMILAR TO '%[^[:alpha:].]%'
SIMILAR TO
运算符也接受POSIX字符类,方括号表达式和通配符,并且需要完整的字符串匹配。因此,%
允许除字母或点([^[:alpha:].]
)之外的任何1个字符之前的任何字符,然后直到字符串末尾也可能还有其他任何字符。