我有一個奇怪的問題。我有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 。否則,它會將整個事情歸零。如果我將 ' ' 替換為 '-' 那么我得到
將資料型別 varchar 轉換為 float 時出錯
這讓我認為即使所有內容都轉換為 varchar 它仍然是數字的。
作為一種解決方法,我可能會從鍵中洗掉最后一個 0,因為 uid2 是 NULL,但這有點“hacky”,我真的很想知道這里發生了什么。
uj5u.com熱心網友回復:
我認為問題在于 SQL Server 正試圖轉換為 int,因為您有 。我想你只想像下面這樣使用 CONCAT:
select CONCAT(uid, uid2) as key
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410541.html
標籤:
上一篇:使用游標更新不在提要資料中迭代
