如何在Oracle中执行简单的子串

时间:2012-05-23 18:43:42

标签: oracle

如何在Oracle Query中执行此操作?这就是说我们想要那个“1”的记录在该列中占据最多位置。


AND substring(convert(varchar,TR.MENU_ID_VALUE), 1, 1) = '1'

2 个答案:

答案 0 :(得分:4)

convert function函数将字符串从一个字符集转换为另一个字符集。语法为convert(<string>, <to character set>, <from character set>)

此外,substring不是Oracle函数,而是substr

如果您不需要转换字符串,那么and substr(tr.menu_id_value,1,1)将为您提供最左侧的字符。

如果您确实要转换字符集,则完整列表为available in the documentation,您也可以查询v$nls_valid_values。例如,如果您要从WE8MSWIN1252 (Windows code-page 1252)转换为AL32UTF8 (UTF-8),那么您的条件将变为:

and substr(convert(tr.menu_id_value,'AL32UTF8','WE8MSWIN1252'),1,1) = '1'

从您的评论中我猜测convert()是在数据类型之间进行转换的SQL-Server函数。在这种情况下,Oracle等效项为to_char。虽然Oracle会隐式进行转换,但总是最好使用to_char并明确转换;给你:

and substr(to_char(tr.menu_id_value),1,1) = '1'

顺便说一下,完全 Oracle等价物是cast()。严格来说,如果您想使用format model,则应使用to_char(),因此substr(cast tr.menu_id_value as varchar2(10)),1,1)也可以在假设tr.menu_id_value的长度小于{{1}}后给您或等于10。

答案 1 :(得分:1)

使用SUBSTR

AND substr(tr.menu_id_value,1,1) = '1'