【问题标题】:error in 'order by' in sql serversql server 中的“order by”错误
【发布时间】:2015-08-28 17:46:40
【问题描述】:

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

'将 varchar 值 '121-2' 转换为数据类型 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 

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    您可以在转换之前使用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
    

    【讨论】:

      【解决方案2】:

      以下查询帮助了我

      order by left(CaseNo_ID,2) asc ,right(CaseNo_ID,4) asc, (select CAST((tbl_RecordRequisition.CaseNo) as int)  where tbl_RecordRequisition.CaseNo not like '%-%' ) asc 
      

      谢谢大家

      【讨论】:

        猜你喜欢
        • 2016-10-11
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        • 2017-06-13
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        相关资源
        最近更新 更多