查询SQL IN以获取字符串列表

时间:2017-06-26 23:12:22

标签: sql

我有以下查询返回0结果,我知道这是错误的。但是不确定我的语法是什么。

select * from SJT_USER where SJT_USER_NAME in
    ( select USER_NAME from NON_MEMBER);

SJT_USER_NAME输入NCHAR(255 CHAR)

USER_NAME输入NVARCHAR2(255 CHAR)

我猜我需要从NVARCHAR2转换到NCHAR。

2 个答案:

答案 0 :(得分:0)

尝试使用SQL Cast,以便比较苹果和苹果。我不确定您使用的是哪个DBMS,但语法应与此类似:

select * from SJT_USER where SJT_USER_NAME in ( select CAST(USER_NAME AS NVARCHAR2) from NON_MEMBER);

答案 1 :(得分:0)

CHAR或NCHAR是固定长度的,因此SJT_USER_NAME用空格填充,因此它填满255个字符。比较两者时有两种选择。您可以TRIM或使用RPAD:

select * from SJT_USER where TRIM(SJT_USER_NAME) in ( select USER_NAME from NON_MEMBER);

select * from SJT_USER where TRIM(SJT_USER_NAME) in ( select RPAD(USER_NAME,255) from NON_MEMBER);

如果你有一个索引SJT_USER_NAME,那么后者可能更好。如果不考虑性能,我通常更喜欢在比较的两侧都有一个TRIM,只是为了安全起见。