比较具有不同数据类型的两列

时间:2019-12-12 11:22:16

标签: sql-server tsql

我在表中有两列具有不同的数据类型,如何比较这两列以寻找相似的值。

Table
column_a(int)  column_b(nvarchar)
-------------  -----------------
1               Apple
2               Mango
3               5
4               2
5               Book

我在下面的查询中尝试过,但是没有用。请提出。

SELECT * FROM tab
WHERE
CAST(column_a AS nvarchar)
IN 
(SELECT column_b FROM tab)

预先感谢

3 个答案:

答案 0 :(得分:0)

为此使用自我加入

SELECT A.* 
FROM TAB A
INNER JOIN TAB B ON CAST(A.column_a as nvarchar) = LTRIM(RTRIM(B.column_b))

答案 1 :(得分:0)

  

由于数字已转换为字符串,因此IN子句中的值均应使用单引号引起来

我从here找到了答案

SELECT * FROM tab
WHERE
CONVERT(column_a AS CHAR(20))
IN 
(SELECT CONVERT(column_b AS    
CHAR(20)) AS column_a FROM tab)

答案 2 :(得分:0)

我将使用TRY_CONVERTEXISTS来做到这一点:

CREATE TABLE dbo.YourTable (ColumnA int,
                            ColumnB nvarchar(5));
INSERT INTO dbo.YourTable (ColumnA,ColumnB)
VALUES (1,'Apple'),
       (2,'Mango'),
       (3,'5'),
       (4,'2'),
       (5,'Book');
GO

SELECT YT.ColumnA,
       YT.ColumnB
FROM dbo.YourTable YT
WHERE EXISTS (SELECT 1
              FROM dbo.YourTable sq
              WHERE YT.ColumnA = TRY_CONVERT(int,sq.ColumnB));

DB<>Fiddle

但是,由于查询不可保存(由于TRY_CONVERT),因此 在大型表中的效果会很差。正如我在评论中提到的那样,如果您需要存储数字数据,请使用数字数据类型。