【发布时间】:2016-03-10 08:39:33
【问题描述】:
我正在尝试使用“+”连接两个字符串,这两个字符串都派生自一个子字符串,每个子字符串都从不允许空值的 ntext 字段转换为 varchar(20)。
当我运行代码时,它只取两个字符串中的第一个,而忽略第二个,因此连接不成功。知道我在这里做错了什么或遗漏了什么吗?
Select Top 100
Substring(Cast(w.WO_Type_Field_02 As nvarchar(20)), 1, 20) As PossFirst,
Substring(Cast(w.WO_Type_Field_04 As nvarchar(20)), 1, (20 -
Len(Substring(Cast(w.WO_Type_Field_02 As nvarchar(20)), 1, 20)) + 1)) As PossLast,
Substring(Cast(w.WO_Type_Field_02 As nvarchar(20)), 1, 20) +
Substring(Cast(w.WO_Type_Field_04 As nvarchar(20)), 1, (20 -
Len(Substring(Cast(w.WO_Type_Field_02 As nvarchar(20)), 1, 20)) + 1)) As PossLogin
from V_WOI_WorkOrder w
我得到的是以下内容:
PossFirst PossLast PossLogin
----------- ----------- -----------
james roberts james
mark smith mark
harry chapman harry
我应该得到的是:
PossFirst PossLast PossLogin
----------- ----------- -----------
james roberts jamesroberts
mark smith marksmith
harry chapman harrychapman
我的子字符串中的 len 的原因是完整的串联长度不应超过 20 个字符,我还没有完成那部分,但我认为这与我的串联失败无关。
【问题讨论】:
-
我们需要数据库模式、样本数据和期望输出。您只提供最后一部分。
-
架构是 dbo,数据只是组织内大约 300k 个人的名字和姓氏的列表。名称中不允许使用除连字符以外的特殊字符,但它们均已从不允许空值的 ntext 字段转换为 varchar(20)。
-
模式意味着数据库结构。我们仍然需要查看数据。您应该提供一个 Minimal Complete 示例。
-
请原谅我的无知胡安卡洛斯,我不清楚你所说的数据库结构是什么意思。如果你想让我运行 select * from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = 'V_WOI_WorkOrder' 恐怕返回的数据是巨大的。再次为我的无知感到抱歉
-
我在返回的数据上方添加了一张图片
标签: sql-server concatenation string-concatenation