Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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 - Fatal编程技术网

Sql server 当所选行为';是字段的串联吗?

Sql server 当所选行为';是字段的串联吗?,sql-server,Sql Server,我的这一行是SQL Select的一部分: REPLACE(STR(temp.AdminTestId,5),' ','0') + '-' + REPLACE(STR(A.UserTestId,5),' ','0') + '-' + REPLACE(STR(A.Sequence,2),' ','0') as TestId, 当序列为null时,TestId返回null。如果序列为null,我希望只显示零填充的AdminTestID“-”和零填充的UserTestId 当序列为空或非空时,您可

我的这一行是SQL Select的一部分:

REPLACE(STR(temp.AdminTestId,5),' ','0') + '-' + 
REPLACE(STR(A.UserTestId,5),' ','0') + '-' + 
REPLACE(STR(A.Sequence,2),' ','0') as TestId,

当序列为null时,TestId返回null。如果序列为null,我希望只显示零填充的AdminTestID“-”和零填充的UserTestId

当序列为空或非空时,您可以使用CASE在两个场景之间进行分支。 您还可以使用ISNULL和COALESCE进行null检查

根据注释中的要求,添加了代码示例

REPLACE(STR(temp.AdminTestId,5),' ','0') + '-' + 
REPLACE(STR(A.UserTestId,5),' ','0') +  
ISNULL('-' + REPLACE(STR(A.Sequence,2),' ','0'),'') as TestId,

当序列为空或不为空时,您可以使用CASE在两个场景之间进行分支。 您还可以使用ISNULL和COALESCE进行null检查

根据注释中的要求,添加了代码示例

REPLACE(STR(temp.AdminTestId,5),' ','0') + '-' + 
REPLACE(STR(A.UserTestId,5),' ','0') +  
ISNULL('-' + REPLACE(STR(A.Sequence,2),' ','0'),'') as TestId,

将空值连接到字符串将在Sql server中返回空字符串。 解决方案通常是使用Sql server的内置函数将空值转换为空字符串,因此您的代码如下所示:

REPLACE(COALESCE(STR(temp.AdminTestId,5), ''),' ','0') + '-' + 
REPLACE(COALESCE(STR(A.UserTestId,5), ''),' ','0') + '-' + 
REPLACE(COALESCE(STR(A.Sequence,2), ''), ''),' ','0') as TestId,
函数是Sql server将返回它收到的第一个参数,该参数不是
NULL

编辑

为了回答您的评论,利用将null连接到字符串将返回null这一事实,您可以简单地将连字符连接到
a.Sequence

REPLACE(COALESCE(STR(temp.AdminTestId,5), ''),' ','0') + '-' + 
REPLACE(COALESCE(STR(A.UserTestId,5), ''),' ','0') + 
REPLACE(COALESCE('-' + STR(A.Sequence,2), ''),' ','0') as TestId,

将空值连接到字符串将在Sql server中返回空字符串。 解决方案通常是使用Sql server的内置函数将空值转换为空字符串,因此您的代码如下所示:

REPLACE(COALESCE(STR(temp.AdminTestId,5), ''),' ','0') + '-' + 
REPLACE(COALESCE(STR(A.UserTestId,5), ''),' ','0') + '-' + 
REPLACE(COALESCE(STR(A.Sequence,2), ''), ''),' ','0') as TestId,
函数是Sql server将返回它收到的第一个参数,该参数不是
NULL

编辑

为了回答您的评论,利用将null连接到字符串将返回null这一事实,您可以简单地将连字符连接到
a.Sequence

REPLACE(COALESCE(STR(temp.AdminTestId,5), ''),' ','0') + '-' + 
REPLACE(COALESCE(STR(A.UserTestId,5), ''),' ','0') + 
REPLACE(COALESCE('-' + STR(A.Sequence,2), ''),' ','0') as TestId,

不是100%确定我完全理解,但请检查COALESCE函数。您可能也需要CASE。不是100%确定我完全理解,但请查看COALESCE函数。你可能也需要这个箱子,谢谢。我会试试看。对于我的示例,我可以看到缺少的一点是,若序列为null,那个么将有两个连字符。我希望第二个连字符不显示。你能给我一些建议吗?你最后的答案似乎有语法错误0')作为TestId,有一个
,“”)
太多。修好了,谢谢。我会试试看。对于我的示例,我可以看到缺少的一点是,若序列为null,那个么将有两个连字符。我希望第二个连字符不显示。你能给我一些建议吗?你最后的答案似乎有语法错误0')作为TestId,有一个
,“”)
太多。固定的。