utl_raw.cast_to_varchar2(NLSSORT(')) 是如何工作的

how the utl_raw.cast_to_varchar2(NLSSORT(')) works

为什么这个查询没有给出任何记录。请指导我

SELECT *
FROM DUAL 
  WHERE utl_raw.cast_to_varchar2(NLSSORT('sravanth','nls_sort=binary_ai')) 
        LIKE utl_raw.cast_to_varchar2(NLSSORT('sravan','nls_sort=binary_ai'))|| '%'

在显示 NLSSORT 的输出时这不起作用的原因很明显:

SELECT NLSSORT('sravanth','nls_sort=binary_ai') FROM DUAL
UNION ALL
SELECT NLSSORT('sravan','nls_sort=binary_ai') FROM DUAL
NLSSORT('SRAVANTH','NLS_SORT=BINARY_AI')
73726176616E746800
73726176616E00
            ^^

请注意 NLSSORT 在字符串末尾添加一个额外的 NUL 字符。这在文档中没有指定——您可能不应该假设它的行为总是相同的。无论如何,如果你真的想那样使用 NLSSORT ,你将不得不手动处理额外的字节。以 为例。