SQL 服务器:无法将列输出到 varchar
SQL Server : cannot get columns to output to varchar
我遇到了一个奇怪的问题。我将 uid
和 ui2
列组合成 key
列。大多数情况下,uid 是字母数字组合,我没有任何问题。
然而这组数据的uid都是数字:
输入数据:
+-------+-------+
| uid | uid2 |
+-------+-------+
| 12345 | 98765 |
| 45645 | NULL |
+-------+-------+
输出应该是这样的:
+-------+-------+------------+
| uid | uid2 | key |
+-------+-------+------------+
| 12345 | 98765 | 1234598765 |
| 45645 | NULL | 45645 |
+-------+-------+------------+
如果 uid
不是 NULL 那么它很好,但是,如果它是 NULL,那么它会在 uid 的末尾添加一个 0。所以 uid=45645
我最终得到 456540
当我合并两列时,我使用了CAST AS varchar(255)
。
我也试过 CAST
整个结果。都没有用。
这是我的代码:
SELECT
[uid] AS [id],
[uid2] AS [id2],
(CAST([uid] AS varchar(255)) + CAST(IIF([uid2] IS NULL, ' ', [uid2]) AS varchar(255))) AS [key],
(CAST(CAST([uid] AS varchar(255)) + CAST(IIF([uid2] IS NULL, ' ', [uid2]) AS varchar(255)) AS varchar(255))) AS [key]
FROM
[test]
这就是输出:
+-------+-------+------------+------------+
| uid | uid2 | key | key |
+-------+-------+------------+------------+
| 12345 | 98765 | 1234598765 | 1234598765 |
| 45645 | NULL | 456450 | 456450 |
+-------+-------+------------+------------+
IIF
是处理NULL的。否则它会使整个事物为空。如果我用 '-' 替换 ' ' 然后我得到
Error converting data type varchar to float
这让我觉得即使所有内容都转换为 varchar,它仍然是数字。
作为解决方法,如果 uid2 为 NULL,我可能会从键中删除最后一个 0,但这有点 'hacky',我真的很想知道这里发生了什么。
我认为问题在于 SQL 服务器正在尝试转换为 int,因为您有 +。我认为您只想像下面这样使用 CONCAT:
select CONCAT(uid, uid2) as key
我遇到了一个奇怪的问题。我将 uid
和 ui2
列组合成 key
列。大多数情况下,uid 是字母数字组合,我没有任何问题。
然而这组数据的uid都是数字:
输入数据:
+-------+-------+
| uid | uid2 |
+-------+-------+
| 12345 | 98765 |
| 45645 | NULL |
+-------+-------+
输出应该是这样的:
+-------+-------+------------+
| uid | uid2 | key |
+-------+-------+------------+
| 12345 | 98765 | 1234598765 |
| 45645 | NULL | 45645 |
+-------+-------+------------+
如果 uid
不是 NULL 那么它很好,但是,如果它是 NULL,那么它会在 uid 的末尾添加一个 0。所以 uid=45645
我最终得到 456540
当我合并两列时,我使用了CAST AS varchar(255)
。
我也试过 CAST
整个结果。都没有用。
这是我的代码:
SELECT
[uid] AS [id],
[uid2] AS [id2],
(CAST([uid] AS varchar(255)) + CAST(IIF([uid2] IS NULL, ' ', [uid2]) AS varchar(255))) AS [key],
(CAST(CAST([uid] AS varchar(255)) + CAST(IIF([uid2] IS NULL, ' ', [uid2]) AS varchar(255)) AS varchar(255))) AS [key]
FROM
[test]
这就是输出:
+-------+-------+------------+------------+
| uid | uid2 | key | key |
+-------+-------+------------+------------+
| 12345 | 98765 | 1234598765 | 1234598765 |
| 45645 | NULL | 456450 | 456450 |
+-------+-------+------------+------------+
IIF
是处理NULL的。否则它会使整个事物为空。如果我用 '-' 替换 ' ' 然后我得到
Error converting data type varchar to float
这让我觉得即使所有内容都转换为 varchar,它仍然是数字。
作为解决方法,如果 uid2 为 NULL,我可能会从键中删除最后一个 0,但这有点 'hacky',我真的很想知道这里发生了什么。
我认为问题在于 SQL 服务器正在尝试转换为 int,因为您有 +。我认为您只想像下面这样使用 CONCAT:
select CONCAT(uid, uid2) as key