gpt4 book ai didi

sql - sql server 中的 'order by' 错误

转载 作者:行者123 更新时间:2023-12-02 04:46:45 26 4
gpt4 key购买 nike

我有选择查询,我需要按升序排序。列具有 varchar 数据类型,因此我需要将其转换为 int。我的查询工作正常,但在某些情况下,用户需要输入这样的值“121-1”,因此它会在选择查询时出错

'Conversion failed when converting the varchar value '121-2' to data type int.'

那么有什么解决方案可以忽略这个错误,即使是在输入这样的值('121-1')时也是如此。 ?以下是我的查询

SELECT ( [casetype] + '/' + CONVERT(VARCHAR(50), caseno) 
+ '/' + CONVERT(VARCHAR(50), Year(Getdate())) )AS CaseNo,
caseno_id,
CONVERT(VARCHAR(20), [filedate], 103) AS DateOfFilling,
disrtictfrom,
tbl_recordrequisition.compname,
tbl_recordrequisition.respname,
casestage,
CONVERT(VARCHAR(20), nextdate, 103) AS NextDate,
tbl_recordrequisition.remarks
FROM tbl_recordrequisition
ORDER BY LEFT(caseno_id, 2) ASC,
RIGHT(caseno_id, 4) ASC,
Cast(( Replace(Replace(caseno_id, LEFT(caseno_id, 3), ''), RIGHT(
caseno_id, 5),
'') )
AS INT) ASC

最佳答案

您可以使用 isnumeric转换前的函数以确定值是否可以转换为 int

有点像

case when isnumeric(...) = 1 then cast(... as int) else 0 end 

为避免复制粘贴您的长表达式,您可以预先使用 outer apply 对其进行预计算。

from   tbl_recordrequisition 
outer apply (select Replace(Replace(caseno_id, LEFT(caseno_id, 3), ''),
RIGHT(caseno_id, 5), '') as Value) as CALC
order by LEFT(caseno_id, 2) ASC,
RIGHT(caseno_id, 4) ASC,
case when isnumeric(CALC.Vaule) = 1 then cast(CALC.Value as int) else 0 end asc

关于sql - sql server 中的 'order by' 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32242994/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com