Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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案例始终使用第一个案例?_Sql_Case - Fatal编程技术网

SQL案例始终使用第一个案例?

SQL案例始终使用第一个案例?,sql,case,Sql,Case,所以我有一个SQl案例,它询问整数%3600是否超过10。。。如果不是,它应该 concat()前面有一个“0”。。。和其他案件一样,都有轻微的变化。。。它应该代表一个时代, 结果应该是这样的: 国际瑞典 00:43:23 09:03:45 34:03:09 但结局是这样的: 国际瑞典 0:43:23 4:3:45 23:3:9 所以它总是使用第一种情况,我不知道为什么。。。有人有主意吗 Select concat( case when Int_Sek / 3600 <= 9 then

所以我有一个SQl案例,它询问整数%3600是否超过10。。。如果不是,它应该 concat()前面有一个“0”。。。和其他案件一样,都有轻微的变化。。。它应该代表一个时代,

结果应该是这样的:

国际瑞典
00:43:23
09:03:45
34:03:09

但结局是这样的:
国际瑞典
0:43:23
4:3:45
23:3:9

所以它总是使用第一种情况,我不知道为什么。。。有人有主意吗

Select concat(
case 
when Int_Sek / 3600 <= 9 then concat('0', floor(Int_Sek / 3600)) 
when Int_Sek / 3600 >= 10 then floor(Int_Sek / 3600) END, ':', 
case 
when (Int_Sek % 3600) / 60 <= 9 then concat ('0', (Int_Sek % 3600) / 60) 
when (Int_Sek % 3600) / 60 >= 10 then floor((Int_Sek % 3600) / 60) END, ':', 
case 
when ((Int_Sek % 3600) % 60) % 60 <= 9 then concat('0', ((Int_Sek % 3600) % 60) % 60) 
when ((Int_Sek % 3600) % 60 )% 60 >= 10 then floor(((Int_Sek % 3600) % 60) % 60) END) as "Column A",
from Table A
选择concat(
案例
当Int_Sek/3600=10时,则楼层(Int_Sek/3600)结束“:”,
案例
当(内因塞克%3600)/60=10时,则楼层((内因塞克%3600)/60)结束“:”,
案例
当((内因塞克%3600)%60)%60=10时,则楼层((内因塞克%3600)%60)%60)结束,作为“A列”,
从表A

如果您使用的是SQL Server,为什么不转换为
时间

select dateadd(second, int_sek, convert(time, 0))
您可以将生成的
时间
格式化为字符串

其他数据库提供类似的功能

你的代码有什么问题?考虑您的第一个<代码>案例<代码>表达式:

case when Int_Sek / 3600 <= 9
     then concat('0', floor(Int_Sek / 3600)) 
     when Int_Sek / 3600 >= 10
     then floor(Int_Sek / 3600) 
end,
请注意,我可能还建议将其简化为:

concat(case when Int_Sek / 3600 <= 9 then '0' else '' end,
       floor(Int_Sek / 3600), ':',
       . . .

concat(Int_Sek/3600时的情况)您还可以显示
Int_Sek
的值吗?如果您总是在
0
前面加上前缀,并使用
right
取最右边的两位数字,则不需要任何条件逻辑。使用数据库标记您的问题。如果您使用Postgres,则可以将其简化为
到\u char(make_interval(secs=>int_sek),'hh24:mi:ss')
甚至
make_interval(secs=>int_sek)::时间
谢谢,效果很好……现在显示正确:D
concat(case when Int_Sek / 3600 <= 9 then '0' else '' end,
       floor(Int_Sek / 3600), ':',
       . . .