Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 比较具有不同数据类型的两列_Sql Server_Tsql - Fatal编程技术网

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,我要求的是代表。”。不一样。