SQL Case语句
这是我的SQL语句。我想检查字段测量的长度,如果长度为6个字符,我想显示四个0,否则显示三个0。我可以得到一个错误: “=”附近的语法不正确 这个怎么样:SQL Case语句,sql,sql-server,select,case-expression,Sql,Sql Server,Select,Case Expression,这是我的SQL语句。我想检查字段测量的长度,如果长度为6个字符,我想显示四个0,否则显示三个0。我可以得到一个错误: “=”附近的语法不正确 这个怎么样: select MIN(Measurement), (Case WHEN len(measurement) = 6 then '0000' ELSE '000' END) as [Min] from LeachingView where DateTimeStamp > '2011-01-01' and measurement
select MIN(Measurement),
(Case WHEN len(measurement) = 6 then '0000' ELSE '000' END) as [Min]
from LeachingView where DateTimeStamp > '2011-01-01' and measurement > 0
此外,您还将骨料与非骨料混合
更新
您应该丢失“非设计”
。说明:当您在案例
之后输入一个“变量”时,您可以在子句与变量比较相等时使用。因此,您的SQL也可以是这样的:
select MIN(Measurement),
(Case
WHEN len(min(measurement)) = 6 then '0000'
ELSE '000'
END) as [Min]
from LeachingView
where DateTimeStamp > '2011-01-01' and measurement > 0
也就是说,您可以在以下格式中使用CASE
:
select MIN(Measurement),
(Case len(min(measurement))
WHEN 6 then '0000'
ELSE '000'
END) as [Min]
from LeachingView
where DateTimeStamp > '2011-01-01' and measurement > 0
我猜你想在测量的开头加上一个
CASE SomeField
WHEN 1 then 'One'
WHEN 2 the 'Two'
else 'Three or more'
end
事实证明,我甚至不需要案例陈述,但这篇文章帮助我学会了如何使用它们。
相反,我只是使用了在数字前面加上10个0的代码。然后我选择了正确的8个字符。这就是代码所做的
(select min(measurement)
from LeachingView
where measurement > 0 and inspectionid = RIGHT('000000000' + part_desc, 10)
and datetimestamp > '2010-12-31'
) as [Non-Destructive Min],
感谢大家的帖子,因为如果我们不问,答案将是“否”:您是否仔细检查了“测量”列是否为字符(或varchar,或其他)类型?len(测量)和measurement>0一起使用。度量似乎是字符串,但它也保证是整数吗?@Adrian-sqlserver(来自“=”消息附近的错误语法)我假设其他一些RDBMS可以提供类似的消息。将尽快重新标记。另外,我修正了我的答案,因为我混合了聚合和非聚合。您是否使用它将数值格式化为固定位数?如果是这样,有更好的方法来实现这一点。不能混合聚合和非聚合您正在混合聚合和非聚合显然我应该远离SQL Server。太久了。哇,我不想念它!我最终找到了答案,我把它贴在了下面。感谢您提供有关案例陈述的快速教程。最后我没有用它,但现在我知道了
SELECT CONCAT(Case WHEN LEN(Measurement) = 6 THEN '0000' ELSE '000' END, MIN(Measurement)) AS Measurement
FROM LeachingView
WHERE DateTimeStamp > '2011-01-01' AND Measurement > 0;
(select min(measurement)
from LeachingView
where measurement > 0 and inspectionid = RIGHT('000000000' + part_desc, 10)
and datetimestamp > '2010-12-31'
) as [Non-Destructive Min],
RIGHT('000000000' + part_desc, 10)