Regex DB2:查找字段值,其中第一个字符是小写字母

Regex DB2:查找字段值,其中第一个字符是小写字母,regex,db2,wildcard,lowercase,Regex,Db2,Wildcard,Lowercase,我试图在第一个字符是小写字母的字段中选择一个值。这很困难,因为DB2不允许正则表达式。我目前的尝试是: select * from mytable where field1 like lcase('_%') 我希望下划线后跟%通配符可以在第一个位置找到任何字符,然后将lcase()环绕该位置以确保它是小写的。结果是所有值都被选中,因此lcase()没有执行我希望它执行的操作,事后来看,它被用来转换为小写 考虑到这一点,我如何确保 ('_%') 只有小写字母吗 非常感谢为什么不呢 where

我试图在第一个字符是小写字母的字段中选择一个值。这很困难,因为DB2不允许正则表达式。我目前的尝试是:

select * from mytable
where field1 like lcase('_%')
我希望下划线后跟%通配符可以在第一个位置找到任何字符,然后将lcase()环绕该位置以确保它是小写的。结果是所有值都被选中,因此lcase()没有执行我希望它执行的操作,事后来看,它被用来转换为小写

考虑到这一点,我如何确保

('_%')
只有小写字母吗

非常感谢

为什么不呢

where field1 >= 'a' and field1 < '{'
其中field1>='a'和field1<'{'
这甚至可以使用适当的索引(如果有的话)。 但是,请注意,当您的DB实例进行字典排序时,这将不起作用。但是,我不确定后者是DB属性还是会话属性

另一种更通用的方法(特别是在考虑非ASCII字母时)是检查字段长度是否大于0,由第一个字符组成的小写子字符串是否等于由第一个字符组成的子字符串,而大写的第一个字符是否不等于第一个字符。(在DB2参考中查找函数,我现在还没有准备好。)

为什么不呢

where field1 >= 'a' and field1 < '{'
其中field1>='a'和field1<'{'
这甚至可以使用适当的索引(如果有的话)。 但是,请注意,当您的DB实例进行字典排序时,这将不起作用。但是,我不确定后者是DB属性还是会话属性


另一种更通用的方法(特别是在考虑非ASCII字母时)是检查字段长度是否大于0,由第一个字符组成的小写子字符串是否等于由第一个字符组成的子字符串,而大写的第一个字符是否不等于第一个字符。(在DB2参考中查找函数,我目前还没有准备好。)

我将使用以下内容:

... where substr(field1,1,1) <> upper(substr(field1,1,1))
…其中substr(字段1,1,1)上部(substr(字段1,1,1))

使用
'a'…'z'
的解决方案将无法处理与拉丁字符集不同的字符(例如西里尔语等)

我将使用类似于:

... where substr(field1,1,1) <> upper(substr(field1,1,1))
…其中substr(字段1,1,1)上部(substr(字段1,1,1))

使用
'a'…'z'
的解决方案将无法处理与拉丁字符集不同的字符(例如西里尔等)

DB2是否允许使用xQuery的正则表达式。例如:

with cteGender(VALUE) as
(
values
('M'),('F'),('U'),('S'),(' M'),('f')
),
cteResult(VALUE,RESULT_BOOLEAN) as
(
select '"' || VALUE || ‘"',
xmlquery('fn:matches($VALUE,''^[MFU]{1}$'')') from cteGender
)
select VALUE, RESULT_BOOLEAN,
xmlcast(RESULT_BOOLEAN as integer) RESULT_INTEGER from cteResult;
我从下面的例子:那篇文章很好地解释了如何使用xQuery

DB2没有用于正则表达式的SQL函数,但是使用xQuery您可以做到这一点。但是如果您确实想要用于正则表达式的SQL函数,请访问以下站点:(日语,但代码可以理解)


有关DB2中正则表达式的更多信息,请访问:

DB2是否允许使用xQuery使用正则表达式。例如:

with cteGender(VALUE) as
(
values
('M'),('F'),('U'),('S'),(' M'),('f')
),
cteResult(VALUE,RESULT_BOOLEAN) as
(
select '"' || VALUE || ‘"',
xmlquery('fn:matches($VALUE,''^[MFU]{1}$'')') from cteGender
)
select VALUE, RESULT_BOOLEAN,
xmlcast(RESULT_BOOLEAN as integer) RESULT_INTEGER from cteResult;
我从下面的例子:那篇文章很好地解释了如何使用xQuery

DB2没有用于正则表达式的SQL函数,但是使用xQuery您可以做到这一点。但是如果您确实想要用于正则表达式的SQL函数,请访问以下站点:(日语,但代码可以理解)


有关DB2中正则表达式的更多信息,请访问:

hi Ingo,您的第一个建议无法生效。我认为这与字符的顺序有关,在字符之间进行搜索时,如aAbBcC等,并包含所有字符-尝试您的建议正好做到了这一点。但是,您的第二个建议的逻辑是合理的。@brucezepplin所以这意味着你有字典顺序,太糟糕了,对不起。不过我会更新帖子来警告你。嗨,Ingo,你的第一个建议无法奏效。我认为这与字符之间的顺序有关,在它们之间搜索时,像aAbBcC等,包括所有-尝试你的建议确实做到了这一点。t不过,你第二个建议的逻辑是有道理的。@brucezepplin,这意味着你有字典排序,太糟糕了,对不起。不过,我会更新帖子,警告你不要这样做。