我在表中有两列具有不同的数据类型,如何比较这两列以寻找相似的值。
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)
预先感谢
答案 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_CONVERT
和EXISTS
来做到这一点:
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));
但是,由于查询不可保存(由于TRY_CONVERT
),因此 在大型表中的效果会很差。正如我在评论中提到的那样,如果您需要存储数字数据,请使用数字数据类型。