2014-01-14 71 views
0

我有一个具有数字的Id字段的表。我想查看一下,如果这个数字在$$^$$ ex:$$^$$1265$$^$$所包围的表格中,应该与下一个表格中的ID字段1265相匹配。以下是我迄今为止:Oracle SQL:NVARCHAR2包含一个数字字段

SELECT * 
FROM VarTable a, IDTable b 
WHERE CONVERT(NVARCHAR2(400 CHAR), b.id) LIKE a.var_value;` 

我也曾尝试:

SELECT * 
FROM VarTable a, IDTable b 
WHERE a.var_value LIKE CONVERT(VARCHAR(50), b.id); 

底抛出一个“失踪表达错误”和上一个抛出一个“缺少右括号”的错误。

任何想法?

回答

4

你似乎是使用SQL Server convert()。该功能在Oracle中执行其他操作(请参阅here)。

尝试这样:

SELECT * 
FROM VarTable a join 
    IDTable b 
    on a.var_value LIKE '%$$'||cast(b.id as varchar2(255))||'$$%'; 

您还可以使用to_char()到数字转换为特定的字符串表示。

+0

这工作完美。我早些时候尝试使用to_char(),但总是会出错。 oracle中的'||'串联?我正在尝试使用'+'... – LiverpoolFTW

+0

Gordon - 只是好奇:在这种情况下,我通常会让Oracle为我隐式投射:'... LIKE'%$$'|| b.id || '$$%''。这是一个坏主意吗? –

+3

@EdGibbs。 。 。对于'||'来说这是一个好主意,因为演员阵容很明显。在其他情况下,比如函数的参数,我为了可维护性而进行了明确的转换。因为我使用了很多SQL Server,所以我一直对字符串连接进行明确的转换。 SQL Server使用'+'来进行字符串连接,如果没有显式的强制转换,它会产生一个错误。 –

2

它是一个数字,一个varchar,我会去:

SELECT * 
    FROM VarTable a, 
     IDTable b 
WHERE a.var_value LIKE '%$$'||b.id||'&&%'; 
+0

如果a.var_value = $$^$$ 912659 &&^&&和b.id = 1265会怎么样?是的,它会失败。 – San

+0

@你说得对。我会更新它。谢谢 –