如何在Oracle Query中执行此操作?这就是说我们想要那个“1”的记录在该列中占据最多位置。
AND substring(convert(varchar,TR.MENU_ID_VALUE), 1, 1) = '1'
答案 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'