Sql server 比较具有不同数据类型的两列
表中有两列数据类型不同,如何比较这两列以查找相似的值Sql server 比较具有不同数据类型的两列,sql-server,tsql,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
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)
提前感谢为此使用自连接
SELECT A.*
FROM TAB A
INNER JOIN TAB B ON CAST(A.column_a as nvarchar) = LTRIM(RTRIM(B.column_b))
我会使用
TRY\u CONVERT
和一个存在的来执行此操作:
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\u CONVERT
),因此在大型表中的性能将很差。正如我在评论中提到的,如果您需要存储数字数据,请使用数字数据类型。您能给我们一个两列之间值相似的示例吗?真正的问题是,为什么您要在varchar
中存储本应为数字数据的内容?字母数字和数字数据类型的作用不同。例如,'10'
小于'2'
@xXx,示例在question@Larnu,nvarchar列用于注释,因此它的num值为well@FaisalAlinn你能分享一下你的预期输出吗?嘿,阿卡什,查询运行了,但没有记录。这很奇怪,我在自己的数据库上测试过,它可以工作,可能您在NVARCHAR
列中有空格,请尝试修剪值(请参见上面代码段中的更新查询)。不幸的是,即使在修剪更新选项卡集[column]=LTRIM(RTRIM([column])之后,也没有记录。它在测试表上运行良好,但在我的现有表上不起作用,我的当前表可能存在问题。谢谢,是的,当你找到他们并需要帮助时,添加更多细节。它在测试表上运行良好,但在我的现有表上不起作用,我的当前表可能有问题。感谢他们向我们提供具有代表性的样本数据@FaisalAlinn。如果给我们提供的示例数据没有复制问题,然后告诉我们我们提供的SQL“不起作用”,而您提供的示例却起作用,这是没有用的。感谢您的关注和支持。“恐怕这些数据被公司归为机密。我没有要求提供实际数据,@FaisalAlinn,我要求的是代表。”。不一样。