Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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
TSQL-Case语句+连接2列+从右侧选择10个字符_Tsql_Sql Server 2005_Concatenation_Case - Fatal编程技术网

TSQL-Case语句+连接2列+从右侧选择10个字符

TSQL-Case语句+连接2列+从右侧选择10个字符,tsql,sql-server-2005,concatenation,case,Tsql,Sql Server 2005,Concatenation,Case,我试图在case语句中连接两个字段,其中第二个字段只需要右边的10个字符。第一个字段是25个字符的varchar字段twfcompID;第二个字段是文本字段t.TransNotes。我想以类似497-2059-281369.pdf的内容结束。这是我不起作用的语法 (Case WHEN l.TWFCompID = 'FCLMIL' THEN CAST(m.MatterID AS VARCHAR(100)) + '--' + RIGHT(CAST(t

我试图在case语句中连接两个字段,其中第二个字段只需要右边的10个字符。第一个字段是25个字符的varchar字段twfcompID;第二个字段是文本字段t.TransNotes。我想以类似497-2059-281369.pdf的内容结束。这是我不起作用的语法

(Case
    WHEN l.TWFCompID = 'FCLMIL' THEN    
        CAST(m.MatterID AS VARCHAR(100)) + '--' + 
        RIGHT(CAST(t.TransNotes,10) AS VARCHAR(100))
    WHEN l.TWFCompID like 'f-%' THEN
        CAST(m.MatterID AS VARCHAR(100)) + '--' + (right(t.TransNotes,10) AS VARCHAR(100)) 
    WHEN l.TWFCompID like 'FS-%' THEN
        CAST(m.MatterID AS VARCHAR(100)) + '--' + CAST(right(t.TransNotes,10) AS VARCHAR(100)) 
ELSE '' END) AS 'LineItemID', 
当我运行此操作时,我会得到以下错误: 味精1035,第15级,第10状态,第5行
“CAST”附近的语法不正确,应为“AS”。

问题似乎与第一个WHEN子句有关。右侧和铸造的参数混淆。试试这个

WHEN l.TWFCompID = 'FCLMIL' THEN    
    CAST(m.MatterID AS VARCHAR(100)) + '--' + 
    CAST(RIGHT(t.TransNotes, 10) AS VARCHAR(100))
另一种方法是使用下面的语句,它将转换CAST和RIGHT语句

WHEN l.TWFCompID = 'FCLMIL' THEN    
    CAST(m.MatterID AS VARCHAR(100)) + '--' + 
    RIGHT(CAST(t.TransNotes AS VARCHAR(100)), 10)

您可能还缺少第二个WHEN子句中的CAST关键字。

我先是这样做的,但在这种情况下,我得到了错误:Msg 8116,级别16,状态1,第1行参数数据类型text对于right函数的参数1无效。然而,关于第二组演员,你是对的。我已经重写了100遍。transNotes字段就是那个无限文本字段。谢谢:还在挣扎。看起来无法在文本字段中使用正确的关键字。您可以使用什么函数仅获取字段中任何内容的最后10个字符?当我使用您建议的语法时,对于右函数的参数1,我得到>Msg 8116,级别16,状态1,第1行参数数据类型text is invalid>。我编辑了我的答案以包含一个替代选项。它切换右函数和强制转换函数的位置,以便先更改数据类型,然后应用正确的函数。谢谢!成功了。我也从一个朋友那里得到了这个,它也能工作:+CAST RIGHTCASTt.TransNotes作为VARCHARmax,11作为varchar25